{"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: 120377 bytes, number of entries: 108\n+Zip file size: 120809 bytes, number of entries: 108\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 com/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 com/alibaba/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 com/alibaba/dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 com/alibaba/dubbo/rpc/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 com/alibaba/dubbo/rpc/service/\n@@ -25,86 +25,86 @@\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-api/\n -rw-r--r--  2.0 unx     2538 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      170 b- defN 20-Apr-01 08:04 META-INF/NOTICE\n -rw-r--r--  2.0 unx      959 b- defN 20-Apr-01 08:04 com/alibaba/dubbo/rpc/service/EchoService.java\n--rw-r--r--  2.0 unx     1966 b- defN 20-Apr-01 08:04 com/alibaba/dubbo/rpc/service/GenericException.java\n+-rw-r--r--  2.0 unx     2028 b- defN 20-Apr-01 08:04 com/alibaba/dubbo/rpc/service/GenericException.java\n -rw-r--r--  2.0 unx     1125 b- defN 20-Apr-01 08:04 com/alibaba/dubbo/rpc/service/GenericService.java\n--rw-r--r--  2.0 unx     7812 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AppResponse.java\n+-rw-r--r--  2.0 unx     8067 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AppResponse.java\n -rw-r--r--  2.0 unx     2608 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AsyncContext.java\n--rw-r--r--  2.0 unx     2600 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AsyncContextImpl.java\n--rw-r--r--  2.0 unx    12324 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AsyncRpcResult.java\n--rw-r--r--  2.0 unx     2408 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AttachmentsAdapter.java\n--rw-r--r--  2.0 unx     2584 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Constants.java\n+-rw-r--r--  2.0 unx     2678 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AsyncContextImpl.java\n+-rw-r--r--  2.0 unx    12661 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AsyncRpcResult.java\n+-rw-r--r--  2.0 unx     2479 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/AttachmentsAdapter.java\n+-rw-r--r--  2.0 unx     2681 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Constants.java\n -rw-r--r--  2.0 unx     1343 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Exporter.java\n -rw-r--r--  2.0 unx     1452 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ExporterListener.java\n -rw-r--r--  2.0 unx     2405 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Filter.java\n--rw-r--r--  2.0 unx     3965 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/FutureContext.java\n--rw-r--r--  2.0 unx     3745 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Invocation.java\n--rw-r--r--  2.0 unx      887 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/InvokeMode.java\n+-rw-r--r--  2.0 unx     4073 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/FutureContext.java\n+-rw-r--r--  2.0 unx     3885 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Invocation.java\n+-rw-r--r--  2.0 unx      910 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/InvokeMode.java\n -rw-r--r--  2.0 unx     1489 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Invoker.java\n -rw-r--r--  2.0 unx     1434 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/InvokerListener.java\n--rw-r--r--  2.0 unx     2000 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ListenableFilter.java\n+-rw-r--r--  2.0 unx     2053 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ListenableFilter.java\n -rw-r--r--  2.0 unx     3568 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Protocol.java\n--rw-r--r--  2.0 unx     1484 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ProtocolServer.java\n--rw-r--r--  2.0 unx     1757 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ProxyFactory.java\n--rw-r--r--  2.0 unx     5441 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Result.java\n+-rw-r--r--  2.0 unx     1531 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ProtocolServer.java\n+-rw-r--r--  2.0 unx     1817 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ProxyFactory.java\n+-rw-r--r--  2.0 unx     5629 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/Result.java\n -rw-r--r--  2.0 unx     1438 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/RpcConstants.java\n--rw-r--r--  2.0 unx    22275 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/RpcContext.java\n--rw-r--r--  2.0 unx     3363 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/RpcException.java\n--rw-r--r--  2.0 unx    14986 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/RpcInvocation.java\n+-rw-r--r--  2.0 unx    23133 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/RpcContext.java\n+-rw-r--r--  2.0 unx     3479 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/RpcException.java\n+-rw-r--r--  2.0 unx    15427 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/RpcInvocation.java\n -rw-r--r--  2.0 unx     8590 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/RpcStatus.java\n--rw-r--r--  2.0 unx     2912 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/TimeoutCountDown.java\n--rw-r--r--  2.0 unx     1189 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ZoneDetector.java\n--rw-r--r--  2.0 unx     7579 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/AccessLogFilter.java\n+-rw-r--r--  2.0 unx     3002 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/TimeoutCountDown.java\n+-rw-r--r--  2.0 unx     1221 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/ZoneDetector.java\n+-rw-r--r--  2.0 unx     7773 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/AccessLogFilter.java\n -rw-r--r--  2.0 unx     5667 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/ActiveLimitFilter.java\n -rw-r--r--  2.0 unx     1827 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/ClassLoaderFilter.java\n -rw-r--r--  2.0 unx     4025 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/CompatibleFilter.java\n--rw-r--r--  2.0 unx     3400 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/ConsumerContextFilter.java\n--rw-r--r--  2.0 unx     6200 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/ContextFilter.java\n+-rw-r--r--  2.0 unx     3472 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/ConsumerContextFilter.java\n+-rw-r--r--  2.0 unx     6348 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/ContextFilter.java\n -rw-r--r--  2.0 unx     3267 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/DeprecatedFilter.java\n -rw-r--r--  2.0 unx     1852 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/EchoFilter.java\n -rw-r--r--  2.0 unx     5798 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/ExceptionFilter.java\n -rw-r--r--  2.0 unx     3810 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/ExecuteLimitFilter.java\n--rw-r--r--  2.0 unx    13134 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/GenericFilter.java\n+-rw-r--r--  2.0 unx    13371 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/GenericFilter.java\n -rw-r--r--  2.0 unx    11294 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/GenericImplFilter.java\n -rw-r--r--  2.0 unx     2875 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/TimeoutFilter.java\n -rw-r--r--  2.0 unx     2581 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/TokenFilter.java\n--rw-r--r--  2.0 unx     2561 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/TpsLimitFilter.java\n--rw-r--r--  2.0 unx     2716 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/tps/DefaultTPSLimiter.java\n--rw-r--r--  2.0 unx     2580 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/tps/StatItem.java\n+-rw-r--r--  2.0 unx     2620 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/TpsLimitFilter.java\n+-rw-r--r--  2.0 unx     2783 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/tps/DefaultTPSLimiter.java\n+-rw-r--r--  2.0 unx     2672 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/tps/StatItem.java\n -rw-r--r--  2.0 unx     1656 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/filter/tps/TPSLimiter.java\n -rw-r--r--  2.0 unx     1709 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/listener/DeprecatedInvokerListener.java\n -rw-r--r--  2.0 unx     1301 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/listener/ExporterListenerAdapter.java\n -rw-r--r--  2.0 unx     1271 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/listener/InvokerListenerAdapter.java\n -rw-r--r--  2.0 unx     3226 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/listener/ListenerExporterWrapper.java\n -rw-r--r--  2.0 unx     3415 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/listener/ListenerInvokerWrapper.java\n -rw-r--r--  2.0 unx     2294 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/AbstractExporter.java\n--rw-r--r--  2.0 unx     8018 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/AbstractInvoker.java\n--rw-r--r--  2.0 unx     4350 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/AbstractProtocol.java\n+-rw-r--r--  2.0 unx     8226 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/AbstractInvoker.java\n+-rw-r--r--  2.0 unx     4466 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/AbstractProtocol.java\n -rw-r--r--  2.0 unx     8676 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/AbstractProxyProtocol.java\n--rw-r--r--  2.0 unx     3926 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/AsyncToSyncInvoker.java\n--rw-r--r--  2.0 unx     4009 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/FilterNode.java\n+-rw-r--r--  2.0 unx     4028 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/AsyncToSyncInvoker.java\n+-rw-r--r--  2.0 unx     4126 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/FilterNode.java\n -rw-r--r--  2.0 unx     1837 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/InvokerWrapper.java\n -rw-r--r--  2.0 unx     3408 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/ProtocolFilterWrapper.java\n -rw-r--r--  2.0 unx     3352 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/ProtocolListenerWrapper.java\n--rw-r--r--  2.0 unx     3502 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/dubbo/FutureAdapter.java\n--rw-r--r--  2.0 unx     1033 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/dubbo/package-info.java\n+-rw-r--r--  2.0 unx     3601 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/dubbo/FutureAdapter.java\n+-rw-r--r--  2.0 unx     1054 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/dubbo/package-info.java\n -rw-r--r--  2.0 unx     3246 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java\n--rw-r--r--  2.0 unx     4848 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/AbstractProxyInvoker.java\n--rw-r--r--  2.0 unx     3857 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java\n--rw-r--r--  2.0 unx     2236 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java\n+-rw-r--r--  2.0 unx     4975 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/AbstractProxyInvoker.java\n+-rw-r--r--  2.0 unx     3955 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java\n+-rw-r--r--  2.0 unx     2288 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java\n -rw-r--r--  2.0 unx     2124 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/jdk/JdkProxyFactory.java\n -rw-r--r--  2.0 unx     5842 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/proxy/wrapper/StubProxyFactoryWrapper.java\n--rw-r--r--  2.0 unx     7911 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/support/AccessLogData.java\n+-rw-r--r--  2.0 unx     8192 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/support/AccessLogData.java\n -rw-r--r--  2.0 unx    11093 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/support/MockInvoker.java\n -rw-r--r--  2.0 unx     1630 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/support/MockProtocol.java\n--rw-r--r--  2.0 unx    11062 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/support/RpcUtils.java\n+-rw-r--r--  2.0 unx    11335 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/support/RpcUtils.java\n -rw-r--r--  2.0 unx      820 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter\n -rw-r--r--  2.0 unx       66 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.rpc.InvokerListener\n -rw-r--r--  2.0 unx      170 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\n -rw-r--r--  2.0 unx      185 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.rpc.ProxyFactory\n--rw-r--r--  2.0 unx     2480 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-api/pom.xml\n+-rw-r--r--  2.0 unx     2417 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-api/pom.xml\n -rw-r--r--  2.0 unx       68 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-api/pom.properties\n-108 files, 330026 bytes uncompressed, 103391 bytes compressed:  68.7%\n+108 files, 335382 bytes uncompressed, 103823 bytes compressed:  69.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -553,4830 +553,4830 @@\n 01B53 Extract Zip Spec      14 (20) '2.0'\n 01B54 Extract OS            00 (0) 'MS-DOS'\n 01B55 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n 01B57 Compression Method    0008 (8) 'Deflated'\n 01B59 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-01B5D CRC                   C50B0632 (3305834034)\n-01B61 Compressed Size       00000313 (787)\n-01B65 Uncompressed Size     000007AE (1966)\n+01B5D CRC                   1D274B23 (489114403)\n+01B61 Compressed Size       0000031B (795)\n+01B65 Uncompressed Size     000007EC (2028)\n 01B69 Filename Length       0033 (51)\n 01B6B Extra Length          0000 (0)\n 01B6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x1B6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 01BA0 PAYLOAD\n \n-01EB3 LOCAL HEADER #32      04034B50 (67324752)\n-01EB7 Extract Zip Spec      14 (20) '2.0'\n-01EB8 Extract OS            00 (0) 'MS-DOS'\n-01EB9 General Purpose Flag  0800 (2048)\n+01EBB LOCAL HEADER #32      04034B50 (67324752)\n+01EBF Extract Zip Spec      14 (20) '2.0'\n+01EC0 Extract OS            00 (0) 'MS-DOS'\n+01EC1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-01EBB Compression Method    0008 (8) 'Deflated'\n-01EBD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-01EC1 CRC                   C514DA82 (3306478210)\n-01EC5 Compressed Size       00000265 (613)\n-01EC9 Uncompressed Size     00000465 (1125)\n-01ECD Filename Length       0031 (49)\n-01ECF Extra Length          0000 (0)\n-01ED1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+01EC3 Compression Method    0008 (8) 'Deflated'\n+01EC5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+01EC9 CRC                   C514DA82 (3306478210)\n+01ECD Compressed Size       00000265 (613)\n+01ED1 Uncompressed Size     00000465 (1125)\n+01ED5 Filename Length       0031 (49)\n+01ED7 Extra Length          0000 (0)\n+01ED9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1ED1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1ED9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01F02 PAYLOAD\n+01F0A PAYLOAD\n \n-02167 LOCAL HEADER #33      04034B50 (67324752)\n-0216B Extract Zip Spec      14 (20) '2.0'\n-0216C Extract OS            00 (0) 'MS-DOS'\n-0216D General Purpose Flag  0800 (2048)\n+0216F LOCAL HEADER #33      04034B50 (67324752)\n+02173 Extract Zip Spec      14 (20) '2.0'\n+02174 Extract OS            00 (0) 'MS-DOS'\n+02175 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0216F Compression Method    0008 (8) 'Deflated'\n-02171 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-02175 CRC                   3836550F (943084815)\n-02179 Compressed Size       00000848 (2120)\n-0217D Uncompressed Size     00001E84 (7812)\n-02181 Filename Length       0025 (37)\n-02183 Extra Length          0000 (0)\n-02185 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02177 Compression Method    0008 (8) 'Deflated'\n+02179 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0217D CRC                   58855C59 (1485134937)\n+02181 Compressed Size       00000858 (2136)\n+02185 Uncompressed Size     00001F83 (8067)\n+02189 Filename Length       0025 (37)\n+0218B Extra Length          0000 (0)\n+0218D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2185: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x218D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-021AA PAYLOAD\n+021B2 PAYLOAD\n \n-029F2 LOCAL HEADER #34      04034B50 (67324752)\n-029F6 Extract Zip Spec      14 (20) '2.0'\n-029F7 Extract OS            00 (0) 'MS-DOS'\n-029F8 General Purpose Flag  0800 (2048)\n+02A0A LOCAL HEADER #34      04034B50 (67324752)\n+02A0E Extract Zip Spec      14 (20) '2.0'\n+02A0F Extract OS            00 (0) 'MS-DOS'\n+02A10 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-029FA Compression Method    0008 (8) 'Deflated'\n-029FC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-02A00 CRC                   16C36050 (381902928)\n-02A04 Compressed Size       00000443 (1091)\n-02A08 Uncompressed Size     00000A30 (2608)\n-02A0C Filename Length       0026 (38)\n-02A0E Extra Length          0000 (0)\n-02A10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02A12 Compression Method    0008 (8) 'Deflated'\n+02A14 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+02A18 CRC                   16C36050 (381902928)\n+02A1C Compressed Size       00000443 (1091)\n+02A20 Uncompressed Size     00000A30 (2608)\n+02A24 Filename Length       0026 (38)\n+02A26 Extra Length          0000 (0)\n+02A28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2A10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2A28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02A36 PAYLOAD\n+02A4E PAYLOAD\n \n-02E79 LOCAL HEADER #35      04034B50 (67324752)\n-02E7D Extract Zip Spec      14 (20) '2.0'\n-02E7E Extract OS            00 (0) 'MS-DOS'\n-02E7F General Purpose Flag  0800 (2048)\n+02E91 LOCAL HEADER #35      04034B50 (67324752)\n+02E95 Extract Zip Spec      14 (20) '2.0'\n+02E96 Extract OS            00 (0) 'MS-DOS'\n+02E97 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-02E81 Compression Method    0008 (8) 'Deflated'\n-02E83 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-02E87 CRC                   5C1C5F40 (1545363264)\n-02E8B Compressed Size       00000402 (1026)\n-02E8F Uncompressed Size     00000A28 (2600)\n-02E93 Filename Length       002A (42)\n-02E95 Extra Length          0000 (0)\n-02E97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02E99 Compression Method    0008 (8) 'Deflated'\n+02E9B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+02E9F CRC                   28FBE016 (687595542)\n+02EA3 Compressed Size       0000040C (1036)\n+02EA7 Uncompressed Size     00000A76 (2678)\n+02EAB Filename Length       002A (42)\n+02EAD Extra Length          0000 (0)\n+02EAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2E97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2EAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02EC1 PAYLOAD\n+02ED9 PAYLOAD\n \n-032C3 LOCAL HEADER #36      04034B50 (67324752)\n-032C7 Extract Zip Spec      14 (20) '2.0'\n-032C8 Extract OS            00 (0) 'MS-DOS'\n-032C9 General Purpose Flag  0800 (2048)\n+032E5 LOCAL HEADER #36      04034B50 (67324752)\n+032E9 Extract Zip Spec      14 (20) '2.0'\n+032EA Extract OS            00 (0) 'MS-DOS'\n+032EB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-032CB Compression Method    0008 (8) 'Deflated'\n-032CD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-032D1 CRC                   93FCD4E8 (2482820328)\n-032D5 Compressed Size       00000BD6 (3030)\n-032D9 Uncompressed Size     00003024 (12324)\n-032DD Filename Length       0028 (40)\n-032DF Extra Length          0000 (0)\n-032E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+032ED Compression Method    0008 (8) 'Deflated'\n+032EF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+032F3 CRC                   18D15EB0 (416374448)\n+032F7 Compressed Size       00000BEA (3050)\n+032FB Uncompressed Size     00003175 (12661)\n+032FF Filename Length       0028 (40)\n+03301 Extra Length          0000 (0)\n+03303 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x32E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3303: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03309 PAYLOAD\n+0332B PAYLOAD\n \n-03EDF LOCAL HEADER #37      04034B50 (67324752)\n-03EE3 Extract Zip Spec      14 (20) '2.0'\n-03EE4 Extract OS            00 (0) 'MS-DOS'\n-03EE5 General Purpose Flag  0800 (2048)\n+03F15 LOCAL HEADER #37      04034B50 (67324752)\n+03F19 Extract Zip Spec      14 (20) '2.0'\n+03F1A Extract OS            00 (0) 'MS-DOS'\n+03F1B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-03EE7 Compression Method    0008 (8) 'Deflated'\n-03EE9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-03EED CRC                   735FA0B6 (1935646902)\n-03EF1 Compressed Size       000003B0 (944)\n-03EF5 Uncompressed Size     00000968 (2408)\n-03EF9 Filename Length       002C (44)\n-03EFB Extra Length          0000 (0)\n-03EFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03F1D Compression Method    0008 (8) 'Deflated'\n+03F1F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+03F23 CRC                   C1E775CF (3253171663)\n+03F27 Compressed Size       000003B9 (953)\n+03F2B Uncompressed Size     000009AF (2479)\n+03F2F Filename Length       002C (44)\n+03F31 Extra Length          0000 (0)\n+03F33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3EFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3F33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03F29 PAYLOAD\n+03F5F PAYLOAD\n \n-042D9 LOCAL HEADER #38      04034B50 (67324752)\n-042DD Extract Zip Spec      14 (20) '2.0'\n-042DE Extract OS            00 (0) 'MS-DOS'\n-042DF General Purpose Flag  0800 (2048)\n+04318 LOCAL HEADER #38      04034B50 (67324752)\n+0431C Extract Zip Spec      14 (20) '2.0'\n+0431D Extract OS            00 (0) 'MS-DOS'\n+0431E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-042E1 Compression Method    0008 (8) 'Deflated'\n-042E3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-042E7 CRC                   2AE2442E (719471662)\n-042EB Compressed Size       00000471 (1137)\n-042EF Uncompressed Size     00000A18 (2584)\n-042F3 Filename Length       0023 (35)\n-042F5 Extra Length          0000 (0)\n-042F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04320 Compression Method    0008 (8) 'Deflated'\n+04322 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04326 CRC                   7E97C5F2 (2123875826)\n+0432A Compressed Size       0000047B (1147)\n+0432E Uncompressed Size     00000A79 (2681)\n+04332 Filename Length       0023 (35)\n+04334 Extra Length          0000 (0)\n+04336 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x42F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4336: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0431A PAYLOAD\n+04359 PAYLOAD\n \n-0478B LOCAL HEADER #39      04034B50 (67324752)\n-0478F Extract Zip Spec      14 (20) '2.0'\n-04790 Extract OS            00 (0) 'MS-DOS'\n-04791 General Purpose Flag  0800 (2048)\n+047D4 LOCAL HEADER #39      04034B50 (67324752)\n+047D8 Extract Zip Spec      14 (20) '2.0'\n+047D9 Extract OS            00 (0) 'MS-DOS'\n+047DA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04793 Compression Method    0008 (8) 'Deflated'\n-04795 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04799 CRC                   525AF459 (1381692505)\n-0479D Compressed Size       00000299 (665)\n-047A1 Uncompressed Size     0000053F (1343)\n-047A5 Filename Length       0022 (34)\n-047A7 Extra Length          0000 (0)\n-047A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+047DC Compression Method    0008 (8) 'Deflated'\n+047DE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+047E2 CRC                   525AF459 (1381692505)\n+047E6 Compressed Size       00000299 (665)\n+047EA Uncompressed Size     0000053F (1343)\n+047EE Filename Length       0022 (34)\n+047F0 Extra Length          0000 (0)\n+047F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x47A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x47F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-047CB PAYLOAD\n+04814 PAYLOAD\n \n-04A64 LOCAL HEADER #40      04034B50 (67324752)\n-04A68 Extract Zip Spec      14 (20) '2.0'\n-04A69 Extract OS            00 (0) 'MS-DOS'\n-04A6A General Purpose Flag  0800 (2048)\n+04AAD LOCAL HEADER #40      04034B50 (67324752)\n+04AB1 Extract Zip Spec      14 (20) '2.0'\n+04AB2 Extract OS            00 (0) 'MS-DOS'\n+04AB3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04A6C Compression Method    0008 (8) 'Deflated'\n-04A6E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04A72 CRC                   FC32E707 (4231194375)\n-04A76 Compressed Size       0000029D (669)\n-04A7A Uncompressed Size     000005AC (1452)\n-04A7E Filename Length       002A (42)\n-04A80 Extra Length          0000 (0)\n-04A82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04AB5 Compression Method    0008 (8) 'Deflated'\n+04AB7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04ABB CRC                   FC32E707 (4231194375)\n+04ABF Compressed Size       0000029D (669)\n+04AC3 Uncompressed Size     000005AC (1452)\n+04AC7 Filename Length       002A (42)\n+04AC9 Extra Length          0000 (0)\n+04ACB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4A82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4ACB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04AAC PAYLOAD\n+04AF5 PAYLOAD\n \n-04D49 LOCAL HEADER #41      04034B50 (67324752)\n-04D4D Extract Zip Spec      14 (20) '2.0'\n-04D4E Extract OS            00 (0) 'MS-DOS'\n-04D4F General Purpose Flag  0800 (2048)\n+04D92 LOCAL HEADER #41      04034B50 (67324752)\n+04D96 Extract Zip Spec      14 (20) '2.0'\n+04D97 Extract OS            00 (0) 'MS-DOS'\n+04D98 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04D51 Compression Method    0008 (8) 'Deflated'\n-04D53 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04D57 CRC                   2EDA0DE9 (786042345)\n-04D5B Compressed Size       0000043E (1086)\n-04D5F Uncompressed Size     00000965 (2405)\n-04D63 Filename Length       0020 (32)\n-04D65 Extra Length          0000 (0)\n-04D67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04D9A Compression Method    0008 (8) 'Deflated'\n+04D9C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04DA0 CRC                   2EDA0DE9 (786042345)\n+04DA4 Compressed Size       0000043E (1086)\n+04DA8 Uncompressed Size     00000965 (2405)\n+04DAC Filename Length       0020 (32)\n+04DAE Extra Length          0000 (0)\n+04DB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4D67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4DB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04D87 PAYLOAD\n+04DD0 PAYLOAD\n \n-051C5 LOCAL HEADER #42      04034B50 (67324752)\n-051C9 Extract Zip Spec      14 (20) '2.0'\n-051CA Extract OS            00 (0) 'MS-DOS'\n-051CB General Purpose Flag  0800 (2048)\n+0520E LOCAL HEADER #42      04034B50 (67324752)\n+05212 Extract Zip Spec      14 (20) '2.0'\n+05213 Extract OS            00 (0) 'MS-DOS'\n+05214 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-051CD Compression Method    0008 (8) 'Deflated'\n-051CF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-051D3 CRC                   16263A19 (371603993)\n-051D7 Compressed Size       0000057C (1404)\n-051DB Uncompressed Size     00000F7D (3965)\n-051DF Filename Length       0027 (39)\n-051E1 Extra Length          0000 (0)\n-051E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05216 Compression Method    0008 (8) 'Deflated'\n+05218 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0521C CRC                   F67FCDE8 (4135570920)\n+05220 Compressed Size       00000589 (1417)\n+05224 Uncompressed Size     00000FE9 (4073)\n+05228 Filename Length       0027 (39)\n+0522A Extra Length          0000 (0)\n+0522C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x51E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x522C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0520A PAYLOAD\n+05253 PAYLOAD\n \n-05786 LOCAL HEADER #43      04034B50 (67324752)\n-0578A Extract Zip Spec      14 (20) '2.0'\n-0578B Extract OS            00 (0) 'MS-DOS'\n-0578C General Purpose Flag  0800 (2048)\n+057DC LOCAL HEADER #43      04034B50 (67324752)\n+057E0 Extract Zip Spec      14 (20) '2.0'\n+057E1 Extract OS            00 (0) 'MS-DOS'\n+057E2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0578E Compression Method    0008 (8) 'Deflated'\n-05790 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05794 CRC                   4A170C4C (1243024460)\n-05798 Compressed Size       00000467 (1127)\n-0579C Uncompressed Size     00000EA1 (3745)\n-057A0 Filename Length       0024 (36)\n-057A2 Extra Length          0000 (0)\n-057A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+057E4 Compression Method    0008 (8) 'Deflated'\n+057E6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+057EA CRC                   E5052367 (3842319207)\n+057EE Compressed Size       00000472 (1138)\n+057F2 Uncompressed Size     00000F2D (3885)\n+057F6 Filename Length       0024 (36)\n+057F8 Extra Length          0000 (0)\n+057FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x57A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x57FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-057C8 PAYLOAD\n+0581E PAYLOAD\n \n-05C2F LOCAL HEADER #44      04034B50 (67324752)\n-05C33 Extract Zip Spec      14 (20) '2.0'\n-05C34 Extract OS            00 (0) 'MS-DOS'\n-05C35 General Purpose Flag  0800 (2048)\n+05C90 LOCAL HEADER #44      04034B50 (67324752)\n+05C94 Extract Zip Spec      14 (20) '2.0'\n+05C95 Extract OS            00 (0) 'MS-DOS'\n+05C96 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05C37 Compression Method    0008 (8) 'Deflated'\n-05C39 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05C3D CRC                   D1AB43CA (3517662154)\n-05C41 Compressed Size       00000200 (512)\n-05C45 Uncompressed Size     00000377 (887)\n-05C49 Filename Length       0024 (36)\n-05C4B Extra Length          0000 (0)\n-05C4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05C98 Compression Method    0008 (8) 'Deflated'\n+05C9A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05C9E CRC                   1A821C29 (444734505)\n+05CA2 Compressed Size       00000207 (519)\n+05CA6 Uncompressed Size     0000038E (910)\n+05CAA Filename Length       0024 (36)\n+05CAC Extra Length          0000 (0)\n+05CAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5C4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5CAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05C71 PAYLOAD\n+05CD2 PAYLOAD\n \n-05E71 LOCAL HEADER #45      04034B50 (67324752)\n-05E75 Extract Zip Spec      14 (20) '2.0'\n-05E76 Extract OS            00 (0) 'MS-DOS'\n-05E77 General Purpose Flag  0800 (2048)\n+05ED9 LOCAL HEADER #45      04034B50 (67324752)\n+05EDD Extract Zip Spec      14 (20) '2.0'\n+05EDE Extract OS            00 (0) 'MS-DOS'\n+05EDF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05E79 Compression Method    0008 (8) 'Deflated'\n-05E7B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05E7F CRC                   19B4DE27 (431283751)\n-05E83 Compressed Size       000002C5 (709)\n-05E87 Uncompressed Size     000005D1 (1489)\n-05E8B Filename Length       0021 (33)\n-05E8D Extra Length          0000 (0)\n-05E8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05EE1 Compression Method    0008 (8) 'Deflated'\n+05EE3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05EE7 CRC                   19B4DE27 (431283751)\n+05EEB Compressed Size       000002C5 (709)\n+05EEF Uncompressed Size     000005D1 (1489)\n+05EF3 Filename Length       0021 (33)\n+05EF5 Extra Length          0000 (0)\n+05EF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5E8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5EF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05EB0 PAYLOAD\n+05F18 PAYLOAD\n \n-06175 LOCAL HEADER #46      04034B50 (67324752)\n-06179 Extract Zip Spec      14 (20) '2.0'\n-0617A Extract OS            00 (0) 'MS-DOS'\n-0617B General Purpose Flag  0800 (2048)\n+061DD LOCAL HEADER #46      04034B50 (67324752)\n+061E1 Extract Zip Spec      14 (20) '2.0'\n+061E2 Extract OS            00 (0) 'MS-DOS'\n+061E3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0617D Compression Method    0008 (8) 'Deflated'\n-0617F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-06183 CRC                   D82F1E47 (3626966599)\n-06187 Compressed Size       000002AB (683)\n-0618B Uncompressed Size     0000059A (1434)\n-0618F Filename Length       0029 (41)\n-06191 Extra Length          0000 (0)\n-06193 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+061E5 Compression Method    0008 (8) 'Deflated'\n+061E7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+061EB CRC                   D82F1E47 (3626966599)\n+061EF Compressed Size       000002AB (683)\n+061F3 Uncompressed Size     0000059A (1434)\n+061F7 Filename Length       0029 (41)\n+061F9 Extra Length          0000 (0)\n+061FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6193: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x61FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-061BC PAYLOAD\n+06224 PAYLOAD\n \n-06467 LOCAL HEADER #47      04034B50 (67324752)\n-0646B Extract Zip Spec      14 (20) '2.0'\n-0646C Extract OS            00 (0) 'MS-DOS'\n-0646D General Purpose Flag  0800 (2048)\n+064CF LOCAL HEADER #47      04034B50 (67324752)\n+064D3 Extract Zip Spec      14 (20) '2.0'\n+064D4 Extract OS            00 (0) 'MS-DOS'\n+064D5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0646F Compression Method    0008 (8) 'Deflated'\n-06471 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-06475 CRC                   2BFDB64A (738047562)\n-06479 Compressed Size       0000036F (879)\n-0647D Uncompressed Size     000007D0 (2000)\n-06481 Filename Length       002A (42)\n-06483 Extra Length          0000 (0)\n-06485 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+064D7 Compression Method    0008 (8) 'Deflated'\n+064D9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+064DD CRC                   16B7BD77 (381140343)\n+064E1 Compressed Size       0000037A (890)\n+064E5 Uncompressed Size     00000805 (2053)\n+064E9 Filename Length       002A (42)\n+064EB Extra Length          0000 (0)\n+064ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6485: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x64ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-064AF PAYLOAD\n+06517 PAYLOAD\n \n-0681E LOCAL HEADER #48      04034B50 (67324752)\n-06822 Extract Zip Spec      14 (20) '2.0'\n-06823 Extract OS            00 (0) 'MS-DOS'\n-06824 General Purpose Flag  0800 (2048)\n+06891 LOCAL HEADER #48      04034B50 (67324752)\n+06895 Extract Zip Spec      14 (20) '2.0'\n+06896 Extract OS            00 (0) 'MS-DOS'\n+06897 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-06826 Compression Method    0008 (8) 'Deflated'\n-06828 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0682C CRC                   CCB43BAA (3434363818)\n-06830 Compressed Size       000005D0 (1488)\n-06834 Uncompressed Size     00000DF0 (3568)\n-06838 Filename Length       0022 (34)\n-0683A Extra Length          0000 (0)\n-0683C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+06899 Compression Method    0008 (8) 'Deflated'\n+0689B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0689F CRC                   CCB43BAA (3434363818)\n+068A3 Compressed Size       000005D0 (1488)\n+068A7 Uncompressed Size     00000DF0 (3568)\n+068AB Filename Length       0022 (34)\n+068AD Extra Length          0000 (0)\n+068AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x683C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x68AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0685E PAYLOAD\n+068D1 PAYLOAD\n \n-06E2E LOCAL HEADER #49      04034B50 (67324752)\n-06E32 Extract Zip Spec      14 (20) '2.0'\n-06E33 Extract OS            00 (0) 'MS-DOS'\n-06E34 General Purpose Flag  0800 (2048)\n+06EA1 LOCAL HEADER #49      04034B50 (67324752)\n+06EA5 Extract Zip Spec      14 (20) '2.0'\n+06EA6 Extract OS            00 (0) 'MS-DOS'\n+06EA7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-06E36 Compression Method    0008 (8) 'Deflated'\n-06E38 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-06E3C CRC                   0D33E2B2 (221504178)\n-06E40 Compressed Size       000002CB (715)\n-06E44 Uncompressed Size     000005CC (1484)\n-06E48 Filename Length       0028 (40)\n-06E4A Extra Length          0000 (0)\n-06E4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+06EA9 Compression Method    0008 (8) 'Deflated'\n+06EAB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+06EAF CRC                   6D231835 (1831016501)\n+06EB3 Compressed Size       000002D2 (722)\n+06EB7 Uncompressed Size     000005FB (1531)\n+06EBB Filename Length       0028 (40)\n+06EBD Extra Length          0000 (0)\n+06EBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6E4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6EBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06E74 PAYLOAD\n+06EE7 PAYLOAD\n \n-0713F LOCAL HEADER #50      04034B50 (67324752)\n-07143 Extract Zip Spec      14 (20) '2.0'\n-07144 Extract OS            00 (0) 'MS-DOS'\n-07145 General Purpose Flag  0800 (2048)\n+071B9 LOCAL HEADER #50      04034B50 (67324752)\n+071BD Extract Zip Spec      14 (20) '2.0'\n+071BE Extract OS            00 (0) 'MS-DOS'\n+071BF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07147 Compression Method    0008 (8) 'Deflated'\n-07149 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0714D CRC                   319BF765 (832304997)\n-07151 Compressed Size       000002F9 (761)\n-07155 Uncompressed Size     000006DD (1757)\n-07159 Filename Length       0026 (38)\n-0715B Extra Length          0000 (0)\n-0715D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+071C1 Compression Method    0008 (8) 'Deflated'\n+071C3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+071C7 CRC                   2A77FFA2 (712507298)\n+071CB Compressed Size       00000301 (769)\n+071CF Uncompressed Size     00000719 (1817)\n+071D3 Filename Length       0026 (38)\n+071D5 Extra Length          0000 (0)\n+071D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x715D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x71D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07183 PAYLOAD\n+071FD PAYLOAD\n \n-0747C LOCAL HEADER #51      04034B50 (67324752)\n-07480 Extract Zip Spec      14 (20) '2.0'\n-07481 Extract OS            00 (0) 'MS-DOS'\n-07482 General Purpose Flag  0800 (2048)\n+074FE LOCAL HEADER #51      04034B50 (67324752)\n+07502 Extract Zip Spec      14 (20) '2.0'\n+07503 Extract OS            00 (0) 'MS-DOS'\n+07504 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07484 Compression Method    0008 (8) 'Deflated'\n-07486 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0748A CRC                   7799251E (2006525214)\n-0748E Compressed Size       0000063F (1599)\n-07492 Uncompressed Size     00001541 (5441)\n-07496 Filename Length       0020 (32)\n-07498 Extra Length          0000 (0)\n-0749A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07506 Compression Method    0008 (8) 'Deflated'\n+07508 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0750C CRC                   1DB16B63 (498166627)\n+07510 Compressed Size       0000064F (1615)\n+07514 Uncompressed Size     000015FD (5629)\n+07518 Filename Length       0020 (32)\n+0751A Extra Length          0000 (0)\n+0751C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x749A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x751C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-074BA PAYLOAD\n+0753C PAYLOAD\n \n-07AF9 LOCAL HEADER #52      04034B50 (67324752)\n-07AFD Extract Zip Spec      14 (20) '2.0'\n-07AFE Extract OS            00 (0) 'MS-DOS'\n-07AFF General Purpose Flag  0800 (2048)\n+07B8B LOCAL HEADER #52      04034B50 (67324752)\n+07B8F Extract Zip Spec      14 (20) '2.0'\n+07B90 Extract OS            00 (0) 'MS-DOS'\n+07B91 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07B01 Compression Method    0008 (8) 'Deflated'\n-07B03 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-07B07 CRC                   3BFD1345 (1006441285)\n-07B0B Compressed Size       0000027C (636)\n-07B0F Uncompressed Size     0000059E (1438)\n-07B13 Filename Length       0026 (38)\n-07B15 Extra Length          0000 (0)\n-07B17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07B93 Compression Method    0008 (8) 'Deflated'\n+07B95 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+07B99 CRC                   3BFD1345 (1006441285)\n+07B9D Compressed Size       0000027C (636)\n+07BA1 Uncompressed Size     0000059E (1438)\n+07BA5 Filename Length       0026 (38)\n+07BA7 Extra Length          0000 (0)\n+07BA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7B17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7BA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07B3D PAYLOAD\n+07BCF PAYLOAD\n \n-07DB9 LOCAL HEADER #53      04034B50 (67324752)\n-07DBD Extract Zip Spec      14 (20) '2.0'\n-07DBE Extract OS            00 (0) 'MS-DOS'\n-07DBF General Purpose Flag  0800 (2048)\n+07E4B LOCAL HEADER #53      04034B50 (67324752)\n+07E4F Extract Zip Spec      14 (20) '2.0'\n+07E50 Extract OS            00 (0) 'MS-DOS'\n+07E51 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07DC1 Compression Method    0008 (8) 'Deflated'\n-07DC3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-07DC7 CRC                   8B2B5BC6 (2334874566)\n-07DCB Compressed Size       0000111C (4380)\n-07DCF Uncompressed Size     00005703 (22275)\n-07DD3 Filename Length       0024 (36)\n-07DD5 Extra Length          0000 (0)\n-07DD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07E53 Compression Method    0008 (8) 'Deflated'\n+07E55 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+07E59 CRC                   C3E7F091 (3286757521)\n+07E5D Compressed Size       0000113B (4411)\n+07E61 Uncompressed Size     00005A5D (23133)\n+07E65 Filename Length       0024 (36)\n+07E67 Extra Length          0000 (0)\n+07E69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7DD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7E69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07DFB PAYLOAD\n+07E8D PAYLOAD\n \n-08F17 LOCAL HEADER #54      04034B50 (67324752)\n-08F1B Extract Zip Spec      14 (20) '2.0'\n-08F1C Extract OS            00 (0) 'MS-DOS'\n-08F1D General Purpose Flag  0800 (2048)\n+08FC8 LOCAL HEADER #54      04034B50 (67324752)\n+08FCC Extract Zip Spec      14 (20) '2.0'\n+08FCD Extract OS            00 (0) 'MS-DOS'\n+08FCE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08F1F Compression Method    0008 (8) 'Deflated'\n-08F21 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-08F25 CRC                   D96AD9D5 (3647658453)\n-08F29 Compressed Size       00000478 (1144)\n-08F2D Uncompressed Size     00000D23 (3363)\n-08F31 Filename Length       0026 (38)\n-08F33 Extra Length          0000 (0)\n-08F35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08FD0 Compression Method    0008 (8) 'Deflated'\n+08FD2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08FD6 CRC                   CCECA2E4 (3438060260)\n+08FDA Compressed Size       00000481 (1153)\n+08FDE Uncompressed Size     00000D97 (3479)\n+08FE2 Filename Length       0026 (38)\n+08FE4 Extra Length          0000 (0)\n+08FE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8F35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8FE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08F5B PAYLOAD\n+0900C PAYLOAD\n \n-093D3 LOCAL HEADER #55      04034B50 (67324752)\n-093D7 Extract Zip Spec      14 (20) '2.0'\n-093D8 Extract OS            00 (0) 'MS-DOS'\n-093D9 General Purpose Flag  0800 (2048)\n+0948D LOCAL HEADER #55      04034B50 (67324752)\n+09491 Extract Zip Spec      14 (20) '2.0'\n+09492 Extract OS            00 (0) 'MS-DOS'\n+09493 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-093DB Compression Method    0008 (8) 'Deflated'\n-093DD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-093E1 CRC                   7D1A8DDF (2098892255)\n-093E5 Compressed Size       00000AF0 (2800)\n-093E9 Uncompressed Size     00003A8A (14986)\n-093ED Filename Length       0027 (39)\n-093EF Extra Length          0000 (0)\n-093F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09495 Compression Method    0008 (8) 'Deflated'\n+09497 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0949B CRC                   8DF2CD69 (2381499753)\n+0949F Compressed Size       00000B03 (2819)\n+094A3 Uncompressed Size     00003C43 (15427)\n+094A7 Filename Length       0027 (39)\n+094A9 Extra Length          0000 (0)\n+094AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x93F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x94AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09418 PAYLOAD\n+094D2 PAYLOAD\n \n-09F08 LOCAL HEADER #56      04034B50 (67324752)\n-09F0C Extract Zip Spec      14 (20) '2.0'\n-09F0D Extract OS            00 (0) 'MS-DOS'\n-09F0E General Purpose Flag  0800 (2048)\n+09FD5 LOCAL HEADER #56      04034B50 (67324752)\n+09FD9 Extract Zip Spec      14 (20) '2.0'\n+09FDA Extract OS            00 (0) 'MS-DOS'\n+09FDB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09F10 Compression Method    0008 (8) 'Deflated'\n-09F12 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-09F16 CRC                   B577D739 (3044529977)\n-09F1A Compressed Size       00000742 (1858)\n-09F1E Uncompressed Size     0000218E (8590)\n-09F22 Filename Length       0023 (35)\n-09F24 Extra Length          0000 (0)\n-09F26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09FDD Compression Method    0008 (8) 'Deflated'\n+09FDF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+09FE3 CRC                   B577D739 (3044529977)\n+09FE7 Compressed Size       00000742 (1858)\n+09FEB Uncompressed Size     0000218E (8590)\n+09FEF Filename Length       0023 (35)\n+09FF1 Extra Length          0000 (0)\n+09FF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x9F26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9FF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09F49 PAYLOAD\n+0A016 PAYLOAD\n \n-0A68B LOCAL HEADER #57      04034B50 (67324752)\n-0A68F Extract Zip Spec      14 (20) '2.0'\n-0A690 Extract OS            00 (0) 'MS-DOS'\n-0A691 General Purpose Flag  0800 (2048)\n+0A758 LOCAL HEADER #57      04034B50 (67324752)\n+0A75C Extract Zip Spec      14 (20) '2.0'\n+0A75D Extract OS            00 (0) 'MS-DOS'\n+0A75E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A693 Compression Method    0008 (8) 'Deflated'\n-0A695 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0A699 CRC                   1894D2EA (412406506)\n-0A69D Compressed Size       0000040F (1039)\n-0A6A1 Uncompressed Size     00000B60 (2912)\n-0A6A5 Filename Length       002A (42)\n-0A6A7 Extra Length          0000 (0)\n-0A6A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A760 Compression Method    0008 (8) 'Deflated'\n+0A762 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0A766 CRC                   CDFD7CF6 (3455941878)\n+0A76A Compressed Size       0000041A (1050)\n+0A76E Uncompressed Size     00000BBA (3002)\n+0A772 Filename Length       002A (42)\n+0A774 Extra Length          0000 (0)\n+0A776 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA6A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA776: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A6D3 PAYLOAD\n+0A7A0 PAYLOAD\n \n-0AAE2 LOCAL HEADER #58      04034B50 (67324752)\n-0AAE6 Extract Zip Spec      14 (20) '2.0'\n-0AAE7 Extract OS            00 (0) 'MS-DOS'\n-0AAE8 General Purpose Flag  0800 (2048)\n+0ABBA LOCAL HEADER #58      04034B50 (67324752)\n+0ABBE Extract Zip Spec      14 (20) '2.0'\n+0ABBF Extract OS            00 (0) 'MS-DOS'\n+0ABC0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0AAEA Compression Method    0008 (8) 'Deflated'\n-0AAEC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0AAF0 CRC                   4977D9A5 (1232591269)\n-0AAF4 Compressed Size       0000028D (653)\n-0AAF8 Uncompressed Size     000004A5 (1189)\n-0AAFC Filename Length       0026 (38)\n-0AAFE Extra Length          0000 (0)\n-0AB00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0ABC2 Compression Method    0008 (8) 'Deflated'\n+0ABC4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0ABC8 CRC                   32C986CB (852068043)\n+0ABCC Compressed Size       00000296 (662)\n+0ABD0 Uncompressed Size     000004C5 (1221)\n+0ABD4 Filename Length       0026 (38)\n+0ABD6 Extra Length          0000 (0)\n+0ABD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xAB00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xABD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0AB26 PAYLOAD\n+0ABFE PAYLOAD\n \n-0ADB3 LOCAL HEADER #59      04034B50 (67324752)\n-0ADB7 Extract Zip Spec      14 (20) '2.0'\n-0ADB8 Extract OS            00 (0) 'MS-DOS'\n-0ADB9 General Purpose Flag  0800 (2048)\n+0AE94 LOCAL HEADER #59      04034B50 (67324752)\n+0AE98 Extract Zip Spec      14 (20) '2.0'\n+0AE99 Extract OS            00 (0) 'MS-DOS'\n+0AE9A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0ADBB Compression Method    0008 (8) 'Deflated'\n-0ADBD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0ADC1 CRC                   300456E0 (805590752)\n-0ADC5 Compressed Size       0000098D (2445)\n-0ADC9 Uncompressed Size     00001D9B (7579)\n-0ADCD Filename Length       0030 (48)\n-0ADCF Extra Length          0000 (0)\n-0ADD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0AE9C Compression Method    0008 (8) 'Deflated'\n+0AE9E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0AEA2 CRC                   9594ED56 (2509565270)\n+0AEA6 Compressed Size       0000099C (2460)\n+0AEAA Uncompressed Size     00001E5D (7773)\n+0AEAE Filename Length       0030 (48)\n+0AEB0 Extra Length          0000 (0)\n+0AEB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xADD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xAEB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0AE01 PAYLOAD\n+0AEE2 PAYLOAD\n \n-0B78E LOCAL HEADER #60      04034B50 (67324752)\n-0B792 Extract Zip Spec      14 (20) '2.0'\n-0B793 Extract OS            00 (0) 'MS-DOS'\n-0B794 General Purpose Flag  0800 (2048)\n+0B87E LOCAL HEADER #60      04034B50 (67324752)\n+0B882 Extract Zip Spec      14 (20) '2.0'\n+0B883 Extract OS            00 (0) 'MS-DOS'\n+0B884 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B796 Compression Method    0008 (8) 'Deflated'\n-0B798 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0B79C CRC                   B52DE397 (3039683479)\n-0B7A0 Compressed Size       000006FD (1789)\n-0B7A4 Uncompressed Size     00001623 (5667)\n-0B7A8 Filename Length       0032 (50)\n-0B7AA Extra Length          0000 (0)\n-0B7AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B886 Compression Method    0008 (8) 'Deflated'\n+0B888 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0B88C CRC                   B52DE397 (3039683479)\n+0B890 Compressed Size       000006FD (1789)\n+0B894 Uncompressed Size     00001623 (5667)\n+0B898 Filename Length       0032 (50)\n+0B89A Extra Length          0000 (0)\n+0B89C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB7AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB89C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B7DE PAYLOAD\n+0B8CE PAYLOAD\n \n-0BEDB LOCAL HEADER #61      04034B50 (67324752)\n-0BEDF Extract Zip Spec      14 (20) '2.0'\n-0BEE0 Extract OS            00 (0) 'MS-DOS'\n-0BEE1 General Purpose Flag  0800 (2048)\n+0BFCB LOCAL HEADER #61      04034B50 (67324752)\n+0BFCF Extract Zip Spec      14 (20) '2.0'\n+0BFD0 Extract OS            00 (0) 'MS-DOS'\n+0BFD1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0BEE3 Compression Method    0008 (8) 'Deflated'\n-0BEE5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0BEE9 CRC                   851F3F00 (2233417472)\n-0BEED Compressed Size       00000323 (803)\n-0BEF1 Uncompressed Size     00000723 (1827)\n-0BEF5 Filename Length       0032 (50)\n-0BEF7 Extra Length          0000 (0)\n-0BEF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0BFD3 Compression Method    0008 (8) 'Deflated'\n+0BFD5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0BFD9 CRC                   851F3F00 (2233417472)\n+0BFDD Compressed Size       00000323 (803)\n+0BFE1 Uncompressed Size     00000723 (1827)\n+0BFE5 Filename Length       0032 (50)\n+0BFE7 Extra Length          0000 (0)\n+0BFE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xBEF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xBFE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0BF2B PAYLOAD\n+0C01B PAYLOAD\n \n-0C24E LOCAL HEADER #62      04034B50 (67324752)\n-0C252 Extract Zip Spec      14 (20) '2.0'\n-0C253 Extract OS            00 (0) 'MS-DOS'\n-0C254 General Purpose Flag  0800 (2048)\n+0C33E LOCAL HEADER #62      04034B50 (67324752)\n+0C342 Extract Zip Spec      14 (20) '2.0'\n+0C343 Extract OS            00 (0) 'MS-DOS'\n+0C344 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C256 Compression Method    0008 (8) 'Deflated'\n-0C258 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C25C CRC                   86FDBE3E (2264776254)\n-0C260 Compressed Size       0000059A (1434)\n-0C264 Uncompressed Size     00000FB9 (4025)\n-0C268 Filename Length       0031 (49)\n-0C26A Extra Length          0000 (0)\n-0C26C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C346 Compression Method    0008 (8) 'Deflated'\n+0C348 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C34C CRC                   86FDBE3E (2264776254)\n+0C350 Compressed Size       0000059A (1434)\n+0C354 Uncompressed Size     00000FB9 (4025)\n+0C358 Filename Length       0031 (49)\n+0C35A Extra Length          0000 (0)\n+0C35C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC26C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC35C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C29D PAYLOAD\n+0C38D PAYLOAD\n \n-0C837 LOCAL HEADER #63      04034B50 (67324752)\n-0C83B Extract Zip Spec      14 (20) '2.0'\n-0C83C Extract OS            00 (0) 'MS-DOS'\n-0C83D General Purpose Flag  0800 (2048)\n+0C927 LOCAL HEADER #63      04034B50 (67324752)\n+0C92B Extract Zip Spec      14 (20) '2.0'\n+0C92C Extract OS            00 (0) 'MS-DOS'\n+0C92D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C83F Compression Method    0008 (8) 'Deflated'\n-0C841 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C845 CRC                   A0F5CB6A (2700462954)\n-0C849 Compressed Size       000004F5 (1269)\n-0C84D Uncompressed Size     00000D48 (3400)\n-0C851 Filename Length       0036 (54)\n-0C853 Extra Length          0000 (0)\n-0C855 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C92F Compression Method    0008 (8) 'Deflated'\n+0C931 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C935 CRC                   CA71D506 (3396457734)\n+0C939 Compressed Size       00000501 (1281)\n+0C93D Uncompressed Size     00000D90 (3472)\n+0C941 Filename Length       0036 (54)\n+0C943 Extra Length          0000 (0)\n+0C945 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC855: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC945: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C88B PAYLOAD\n+0C97B PAYLOAD\n \n-0CD80 LOCAL HEADER #64      04034B50 (67324752)\n-0CD84 Extract Zip Spec      14 (20) '2.0'\n-0CD85 Extract OS            00 (0) 'MS-DOS'\n-0CD86 General Purpose Flag  0800 (2048)\n+0CE7C LOCAL HEADER #64      04034B50 (67324752)\n+0CE80 Extract Zip Spec      14 (20) '2.0'\n+0CE81 Extract OS            00 (0) 'MS-DOS'\n+0CE82 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0CD88 Compression Method    0008 (8) 'Deflated'\n-0CD8A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0CD8E CRC                   38AEBD8D (950975885)\n-0CD92 Compressed Size       0000074B (1867)\n-0CD96 Uncompressed Size     00001838 (6200)\n-0CD9A Filename Length       002E (46)\n-0CD9C Extra Length          0000 (0)\n-0CD9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0CE84 Compression Method    0008 (8) 'Deflated'\n+0CE86 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0CE8A CRC                   B42DC810 (3022899216)\n+0CE8E Compressed Size       00000756 (1878)\n+0CE92 Uncompressed Size     000018CC (6348)\n+0CE96 Filename Length       002E (46)\n+0CE98 Extra Length          0000 (0)\n+0CE9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0CDCC PAYLOAD\n+0CEC8 PAYLOAD\n \n-0D517 LOCAL HEADER #65      04034B50 (67324752)\n-0D51B Extract Zip Spec      14 (20) '2.0'\n-0D51C Extract OS            00 (0) 'MS-DOS'\n-0D51D General Purpose Flag  0800 (2048)\n+0D61E LOCAL HEADER #65      04034B50 (67324752)\n+0D622 Extract Zip Spec      14 (20) '2.0'\n+0D623 Extract OS            00 (0) 'MS-DOS'\n+0D624 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0D51F Compression Method    0008 (8) 'Deflated'\n-0D521 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0D525 CRC                   5D6B9E17 (1567333911)\n-0D529 Compressed Size       000004F9 (1273)\n-0D52D Uncompressed Size     00000CC3 (3267)\n-0D531 Filename Length       0031 (49)\n-0D533 Extra Length          0000 (0)\n-0D535 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0D626 Compression Method    0008 (8) 'Deflated'\n+0D628 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0D62C CRC                   5D6B9E17 (1567333911)\n+0D630 Compressed Size       000004F9 (1273)\n+0D634 Uncompressed Size     00000CC3 (3267)\n+0D638 Filename Length       0031 (49)\n+0D63A Extra Length          0000 (0)\n+0D63C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD535: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD63C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D566 PAYLOAD\n+0D66D PAYLOAD\n \n-0DA5F LOCAL HEADER #66      04034B50 (67324752)\n-0DA63 Extract Zip Spec      14 (20) '2.0'\n-0DA64 Extract OS            00 (0) 'MS-DOS'\n-0DA65 General Purpose Flag  0800 (2048)\n+0DB66 LOCAL HEADER #66      04034B50 (67324752)\n+0DB6A Extract Zip Spec      14 (20) '2.0'\n+0DB6B Extract OS            00 (0) 'MS-DOS'\n+0DB6C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0DA67 Compression Method    0008 (8) 'Deflated'\n-0DA69 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0DA6D CRC                   33E95645 (870929989)\n-0DA71 Compressed Size       0000035A (858)\n-0DA75 Uncompressed Size     0000073C (1852)\n-0DA79 Filename Length       002B (43)\n-0DA7B Extra Length          0000 (0)\n-0DA7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0DB6E Compression Method    0008 (8) 'Deflated'\n+0DB70 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0DB74 CRC                   33E95645 (870929989)\n+0DB78 Compressed Size       0000035A (858)\n+0DB7C Uncompressed Size     0000073C (1852)\n+0DB80 Filename Length       002B (43)\n+0DB82 Extra Length          0000 (0)\n+0DB84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xDA7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDB84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0DAA8 PAYLOAD\n+0DBAF PAYLOAD\n \n-0DE02 LOCAL HEADER #67      04034B50 (67324752)\n-0DE06 Extract Zip Spec      14 (20) '2.0'\n-0DE07 Extract OS            00 (0) 'MS-DOS'\n-0DE08 General Purpose Flag  0800 (2048)\n+0DF09 LOCAL HEADER #67      04034B50 (67324752)\n+0DF0D Extract Zip Spec      14 (20) '2.0'\n+0DF0E Extract OS            00 (0) 'MS-DOS'\n+0DF0F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0DE0A Compression Method    0008 (8) 'Deflated'\n-0DE0C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0DE10 CRC                   DF14BD96 (3742678422)\n-0DE14 Compressed Size       000006C8 (1736)\n-0DE18 Uncompressed Size     000016A6 (5798)\n-0DE1C Filename Length       0030 (48)\n-0DE1E Extra Length          0000 (0)\n-0DE20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0DF11 Compression Method    0008 (8) 'Deflated'\n+0DF13 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0DF17 CRC                   DF14BD96 (3742678422)\n+0DF1B Compressed Size       000006C8 (1736)\n+0DF1F Uncompressed Size     000016A6 (5798)\n+0DF23 Filename Length       0030 (48)\n+0DF25 Extra Length          0000 (0)\n+0DF27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xDE20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDF27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0DE50 PAYLOAD\n+0DF57 PAYLOAD\n \n-0E518 LOCAL HEADER #68      04034B50 (67324752)\n-0E51C Extract Zip Spec      14 (20) '2.0'\n-0E51D Extract OS            00 (0) 'MS-DOS'\n-0E51E General Purpose Flag  0800 (2048)\n+0E61F LOCAL HEADER #68      04034B50 (67324752)\n+0E623 Extract Zip Spec      14 (20) '2.0'\n+0E624 Extract OS            00 (0) 'MS-DOS'\n+0E625 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E520 Compression Method    0008 (8) 'Deflated'\n-0E522 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E526 CRC                   FA17120C (4195815948)\n-0E52A Compressed Size       000005A1 (1441)\n-0E52E Uncompressed Size     00000EE2 (3810)\n-0E532 Filename Length       0033 (51)\n-0E534 Extra Length          0000 (0)\n-0E536 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E627 Compression Method    0008 (8) 'Deflated'\n+0E629 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E62D CRC                   FA17120C (4195815948)\n+0E631 Compressed Size       000005A1 (1441)\n+0E635 Uncompressed Size     00000EE2 (3810)\n+0E639 Filename Length       0033 (51)\n+0E63B Extra Length          0000 (0)\n+0E63D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE536: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE63D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E569 PAYLOAD\n+0E670 PAYLOAD\n \n-0EB0A LOCAL HEADER #69      04034B50 (67324752)\n-0EB0E Extract Zip Spec      14 (20) '2.0'\n-0EB0F Extract OS            00 (0) 'MS-DOS'\n-0EB10 General Purpose Flag  0800 (2048)\n+0EC11 LOCAL HEADER #69      04034B50 (67324752)\n+0EC15 Extract Zip Spec      14 (20) '2.0'\n+0EC16 Extract OS            00 (0) 'MS-DOS'\n+0EC17 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0EB12 Compression Method    0008 (8) 'Deflated'\n-0EB14 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EB18 CRC                   BCD228F3 (3167889651)\n-0EB1C Compressed Size       00000AF2 (2802)\n-0EB20 Uncompressed Size     0000334E (13134)\n-0EB24 Filename Length       002E (46)\n-0EB26 Extra Length          0000 (0)\n-0EB28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0EC19 Compression Method    0008 (8) 'Deflated'\n+0EC1B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EC1F CRC                   8B21CC44 (2334248004)\n+0EC23 Compressed Size       00000AFF (2815)\n+0EC27 Uncompressed Size     0000343B (13371)\n+0EC2B Filename Length       002E (46)\n+0EC2D Extra Length          0000 (0)\n+0EC2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEB28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEC2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0EB56 PAYLOAD\n+0EC5D PAYLOAD\n \n-0F648 LOCAL HEADER #70      04034B50 (67324752)\n-0F64C Extract Zip Spec      14 (20) '2.0'\n-0F64D Extract OS            00 (0) 'MS-DOS'\n-0F64E General Purpose Flag  0800 (2048)\n+0F75C LOCAL HEADER #70      04034B50 (67324752)\n+0F760 Extract Zip Spec      14 (20) '2.0'\n+0F761 Extract OS            00 (0) 'MS-DOS'\n+0F762 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F650 Compression Method    0008 (8) 'Deflated'\n-0F652 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F656 CRC                   BDC74FB9 (3183955897)\n-0F65A Compressed Size       00000A8B (2699)\n-0F65E Uncompressed Size     00002C1E (11294)\n-0F662 Filename Length       0032 (50)\n-0F664 Extra Length          0000 (0)\n-0F666 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F764 Compression Method    0008 (8) 'Deflated'\n+0F766 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F76A CRC                   BDC74FB9 (3183955897)\n+0F76E Compressed Size       00000A8B (2699)\n+0F772 Uncompressed Size     00002C1E (11294)\n+0F776 Filename Length       0032 (50)\n+0F778 Extra Length          0000 (0)\n+0F77A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF666: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF77A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0F698 PAYLOAD\n+0F7AC PAYLOAD\n \n-10123 LOCAL HEADER #71      04034B50 (67324752)\n-10127 Extract Zip Spec      14 (20) '2.0'\n-10128 Extract OS            00 (0) 'MS-DOS'\n-10129 General Purpose Flag  0800 (2048)\n+10237 LOCAL HEADER #71      04034B50 (67324752)\n+1023B Extract Zip Spec      14 (20) '2.0'\n+1023C Extract OS            00 (0) 'MS-DOS'\n+1023D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1012B Compression Method    0008 (8) 'Deflated'\n-1012D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10131 CRC                   4BE7E92F (1273489711)\n-10135 Compressed Size       00000465 (1125)\n-10139 Uncompressed Size     00000B3B (2875)\n-1013D Filename Length       002E (46)\n-1013F Extra Length          0000 (0)\n-10141 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1023F Compression Method    0008 (8) 'Deflated'\n+10241 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10245 CRC                   4BE7E92F (1273489711)\n+10249 Compressed Size       00000465 (1125)\n+1024D Uncompressed Size     00000B3B (2875)\n+10251 Filename Length       002E (46)\n+10253 Extra Length          0000 (0)\n+10255 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10141: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10255: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1016F PAYLOAD\n+10283 PAYLOAD\n \n-105D4 LOCAL HEADER #72      04034B50 (67324752)\n-105D8 Extract Zip Spec      14 (20) '2.0'\n-105D9 Extract OS            00 (0) 'MS-DOS'\n-105DA General Purpose Flag  0800 (2048)\n+106E8 LOCAL HEADER #72      04034B50 (67324752)\n+106EC Extract Zip Spec      14 (20) '2.0'\n+106ED Extract OS            00 (0) 'MS-DOS'\n+106EE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-105DC Compression Method    0008 (8) 'Deflated'\n-105DE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-105E2 CRC                   EE9BE4CE (4003194062)\n-105E6 Compressed Size       0000044C (1100)\n-105EA Uncompressed Size     00000A15 (2581)\n-105EE Filename Length       002C (44)\n-105F0 Extra Length          0000 (0)\n-105F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+106F0 Compression Method    0008 (8) 'Deflated'\n+106F2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+106F6 CRC                   EE9BE4CE (4003194062)\n+106FA Compressed Size       0000044C (1100)\n+106FE Uncompressed Size     00000A15 (2581)\n+10702 Filename Length       002C (44)\n+10704 Extra Length          0000 (0)\n+10706 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x105F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10706: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1061E PAYLOAD\n+10732 PAYLOAD\n \n-10A6A LOCAL HEADER #73      04034B50 (67324752)\n-10A6E Extract Zip Spec      14 (20) '2.0'\n-10A6F Extract OS            00 (0) 'MS-DOS'\n-10A70 General Purpose Flag  0800 (2048)\n+10B7E LOCAL HEADER #73      04034B50 (67324752)\n+10B82 Extract Zip Spec      14 (20) '2.0'\n+10B83 Extract OS            00 (0) 'MS-DOS'\n+10B84 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10A72 Compression Method    0008 (8) 'Deflated'\n-10A74 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10A78 CRC                   24C74556 (617039190)\n-10A7C Compressed Size       00000440 (1088)\n-10A80 Uncompressed Size     00000A01 (2561)\n-10A84 Filename Length       002F (47)\n-10A86 Extra Length          0000 (0)\n-10A88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10B86 Compression Method    0008 (8) 'Deflated'\n+10B88 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10B8C CRC                   930DE3AE (2467161006)\n+10B90 Compressed Size       00000448 (1096)\n+10B94 Uncompressed Size     00000A3C (2620)\n+10B98 Filename Length       002F (47)\n+10B9A Extra Length          0000 (0)\n+10B9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10A88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10B9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-10AB7 PAYLOAD\n+10BCB PAYLOAD\n \n-10EF7 LOCAL HEADER #74      04034B50 (67324752)\n-10EFB Extract Zip Spec      14 (20) '2.0'\n-10EFC Extract OS            00 (0) 'MS-DOS'\n-10EFD General Purpose Flag  0800 (2048)\n+11013 LOCAL HEADER #74      04034B50 (67324752)\n+11017 Extract Zip Spec      14 (20) '2.0'\n+11018 Extract OS            00 (0) 'MS-DOS'\n+11019 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10EFF Compression Method    0008 (8) 'Deflated'\n-10F01 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10F05 CRC                   F1C552FF (4056240895)\n-10F09 Compressed Size       0000040A (1034)\n-10F0D Uncompressed Size     00000A9C (2716)\n-10F11 Filename Length       0036 (54)\n-10F13 Extra Length          0000 (0)\n-10F15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1101B Compression Method    0008 (8) 'Deflated'\n+1101D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+11021 CRC                   184AAEF9 (407547641)\n+11025 Compressed Size       00000414 (1044)\n+11029 Uncompressed Size     00000ADF (2783)\n+1102D Filename Length       0036 (54)\n+1102F Extra Length          0000 (0)\n+11031 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10F15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11031: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-10F4B PAYLOAD\n+11067 PAYLOAD\n \n-11355 LOCAL HEADER #75      04034B50 (67324752)\n-11359 Extract Zip Spec      14 (20) '2.0'\n-1135A Extract OS            00 (0) 'MS-DOS'\n-1135B General Purpose Flag  0800 (2048)\n+1147B LOCAL HEADER #75      04034B50 (67324752)\n+1147F Extract Zip Spec      14 (20) '2.0'\n+11480 Extract OS            00 (0) 'MS-DOS'\n+11481 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1135D Compression Method    0008 (8) 'Deflated'\n-1135F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-11363 CRC                   0D540AED (223611629)\n-11367 Compressed Size       00000412 (1042)\n-1136B Uncompressed Size     00000A14 (2580)\n-1136F Filename Length       002D (45)\n-11371 Extra Length          0000 (0)\n-11373 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+11483 Compression Method    0008 (8) 'Deflated'\n+11485 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+11489 CRC                   3867D7AC (946329516)\n+1148D Compressed Size       0000041D (1053)\n+11491 Uncompressed Size     00000A70 (2672)\n+11495 Filename Length       002D (45)\n+11497 Extra Length          0000 (0)\n+11499 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x11373: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11499: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-113A0 PAYLOAD\n+114C6 PAYLOAD\n \n-117B2 LOCAL HEADER #76      04034B50 (67324752)\n-117B6 Extract Zip Spec      14 (20) '2.0'\n-117B7 Extract OS            00 (0) 'MS-DOS'\n-117B8 General Purpose Flag  0800 (2048)\n+118E3 LOCAL HEADER #76      04034B50 (67324752)\n+118E7 Extract Zip Spec      14 (20) '2.0'\n+118E8 Extract OS            00 (0) 'MS-DOS'\n+118E9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-117BA Compression Method    0008 (8) 'Deflated'\n-117BC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-117C0 CRC                   00E586BE (15042238)\n-117C4 Compressed Size       0000032B (811)\n-117C8 Uncompressed Size     00000678 (1656)\n-117CC Filename Length       002F (47)\n-117CE Extra Length          0000 (0)\n-117D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+118EB Compression Method    0008 (8) 'Deflated'\n+118ED Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+118F1 CRC                   00E586BE (15042238)\n+118F5 Compressed Size       0000032B (811)\n+118F9 Uncompressed Size     00000678 (1656)\n+118FD Filename Length       002F (47)\n+118FF Extra Length          0000 (0)\n+11901 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x117D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11901: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-117FF PAYLOAD\n+11930 PAYLOAD\n \n-11B2A LOCAL HEADER #77      04034B50 (67324752)\n-11B2E Extract Zip Spec      14 (20) '2.0'\n-11B2F Extract OS            00 (0) 'MS-DOS'\n-11B30 General Purpose Flag  0800 (2048)\n+11C5B LOCAL HEADER #77      04034B50 (67324752)\n+11C5F Extract Zip Spec      14 (20) '2.0'\n+11C60 Extract OS            00 (0) 'MS-DOS'\n+11C61 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-11B32 Compression Method    0008 (8) 'Deflated'\n-11B34 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-11B38 CRC                   E1C5881F (3787819039)\n-11B3C Compressed Size       00000336 (822)\n-11B40 Uncompressed Size     000006AD (1709)\n-11B44 Filename Length       003C (60)\n-11B46 Extra Length          0000 (0)\n-11B48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+11C63 Compression Method    0008 (8) 'Deflated'\n+11C65 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+11C69 CRC                   E1C5881F (3787819039)\n+11C6D Compressed Size       00000336 (822)\n+11C71 Uncompressed Size     000006AD (1709)\n+11C75 Filename Length       003C (60)\n+11C77 Extra Length          0000 (0)\n+11C79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x11B48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11C79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-11B84 PAYLOAD\n+11CB5 PAYLOAD\n \n-11EBA LOCAL HEADER #78      04034B50 (67324752)\n-11EBE Extract Zip Spec      14 (20) '2.0'\n-11EBF Extract OS            00 (0) 'MS-DOS'\n-11EC0 General Purpose Flag  0800 (2048)\n+11FEB LOCAL HEADER #78      04034B50 (67324752)\n+11FEF Extract Zip Spec      14 (20) '2.0'\n+11FF0 Extract OS            00 (0) 'MS-DOS'\n+11FF1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-11EC2 Compression Method    0008 (8) 'Deflated'\n-11EC4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-11EC8 CRC                   FE9FE6BA (4271892154)\n-11ECC Compressed Size       00000261 (609)\n-11ED0 Uncompressed Size     00000515 (1301)\n-11ED4 Filename Length       003A (58)\n-11ED6 Extra Length          0000 (0)\n-11ED8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+11FF3 Compression Method    0008 (8) 'Deflated'\n+11FF5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+11FF9 CRC                   FE9FE6BA (4271892154)\n+11FFD Compressed Size       00000261 (609)\n+12001 Uncompressed Size     00000515 (1301)\n+12005 Filename Length       003A (58)\n+12007 Extra Length          0000 (0)\n+12009 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x11ED8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x12009: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-11F12 PAYLOAD\n+12043 PAYLOAD\n \n-12173 LOCAL HEADER #79      04034B50 (67324752)\n-12177 Extract Zip Spec      14 (20) '2.0'\n-12178 Extract OS            00 (0) 'MS-DOS'\n-12179 General Purpose Flag  0800 (2048)\n+122A4 LOCAL HEADER #79      04034B50 (67324752)\n+122A8 Extract Zip Spec      14 (20) '2.0'\n+122A9 Extract OS            00 (0) 'MS-DOS'\n+122AA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1217B Compression Method    0008 (8) 'Deflated'\n-1217D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-12181 CRC                   07F77085 (133656709)\n-12185 Compressed Size       00000267 (615)\n-12189 Uncompressed Size     000004F7 (1271)\n-1218D Filename Length       0039 (57)\n-1218F Extra Length          0000 (0)\n-12191 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+122AC Compression Method    0008 (8) 'Deflated'\n+122AE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+122B2 CRC                   07F77085 (133656709)\n+122B6 Compressed Size       00000267 (615)\n+122BA Uncompressed Size     000004F7 (1271)\n+122BE Filename Length       0039 (57)\n+122C0 Extra Length          0000 (0)\n+122C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12191: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x122C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-121CA PAYLOAD\n+122FB PAYLOAD\n \n-12431 LOCAL HEADER #80      04034B50 (67324752)\n-12435 Extract Zip Spec      14 (20) '2.0'\n-12436 Extract OS            00 (0) 'MS-DOS'\n-12437 General Purpose Flag  0800 (2048)\n+12562 LOCAL HEADER #80      04034B50 (67324752)\n+12566 Extract Zip Spec      14 (20) '2.0'\n+12567 Extract OS            00 (0) 'MS-DOS'\n+12568 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12439 Compression Method    0008 (8) 'Deflated'\n-1243B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1243F CRC                   334FA791 (860858257)\n-12443 Compressed Size       000003EB (1003)\n-12447 Uncompressed Size     00000C9A (3226)\n-1244B Filename Length       003A (58)\n-1244D Extra Length          0000 (0)\n-1244F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1256A Compression Method    0008 (8) 'Deflated'\n+1256C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+12570 CRC                   334FA791 (860858257)\n+12574 Compressed Size       000003EB (1003)\n+12578 Uncompressed Size     00000C9A (3226)\n+1257C Filename Length       003A (58)\n+1257E Extra Length          0000 (0)\n+12580 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1244F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x12580: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-12489 PAYLOAD\n+125BA PAYLOAD\n \n-12874 LOCAL HEADER #81      04034B50 (67324752)\n-12878 Extract Zip Spec      14 (20) '2.0'\n-12879 Extract OS            00 (0) 'MS-DOS'\n-1287A General Purpose Flag  0800 (2048)\n+129A5 LOCAL HEADER #81      04034B50 (67324752)\n+129A9 Extract Zip Spec      14 (20) '2.0'\n+129AA Extract OS            00 (0) 'MS-DOS'\n+129AB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1287C Compression Method    0008 (8) 'Deflated'\n-1287E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-12882 CRC                   5C26FEE4 (1546059492)\n-12886 Compressed Size       00000436 (1078)\n-1288A Uncompressed Size     00000D57 (3415)\n-1288E Filename Length       0039 (57)\n-12890 Extra Length          0000 (0)\n-12892 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+129AD Compression Method    0008 (8) 'Deflated'\n+129AF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+129B3 CRC                   5C26FEE4 (1546059492)\n+129B7 Compressed Size       00000436 (1078)\n+129BB Uncompressed Size     00000D57 (3415)\n+129BF Filename Length       0039 (57)\n+129C1 Extra Length          0000 (0)\n+129C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12892: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x129C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-128CB PAYLOAD\n+129FC PAYLOAD\n \n-12D01 LOCAL HEADER #82      04034B50 (67324752)\n-12D05 Extract Zip Spec      14 (20) '2.0'\n-12D06 Extract OS            00 (0) 'MS-DOS'\n-12D07 General Purpose Flag  0800 (2048)\n+12E32 LOCAL HEADER #82      04034B50 (67324752)\n+12E36 Extract Zip Spec      14 (20) '2.0'\n+12E37 Extract OS            00 (0) 'MS-DOS'\n+12E38 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12D09 Compression Method    0008 (8) 'Deflated'\n-12D0B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-12D0F CRC                   EC8B751D (3968562461)\n-12D13 Compressed Size       0000037F (895)\n-12D17 Uncompressed Size     000008F6 (2294)\n-12D1B Filename Length       0033 (51)\n-12D1D Extra Length          0000 (0)\n-12D1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+12E3A Compression Method    0008 (8) 'Deflated'\n+12E3C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+12E40 CRC                   EC8B751D (3968562461)\n+12E44 Compressed Size       0000037F (895)\n+12E48 Uncompressed Size     000008F6 (2294)\n+12E4C Filename Length       0033 (51)\n+12E4E Extra Length          0000 (0)\n+12E50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12D1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x12E50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-12D52 PAYLOAD\n+12E83 PAYLOAD\n \n-130D1 LOCAL HEADER #83      04034B50 (67324752)\n-130D5 Extract Zip Spec      14 (20) '2.0'\n-130D6 Extract OS            00 (0) 'MS-DOS'\n-130D7 General Purpose Flag  0800 (2048)\n+13202 LOCAL HEADER #83      04034B50 (67324752)\n+13206 Extract Zip Spec      14 (20) '2.0'\n+13207 Extract OS            00 (0) 'MS-DOS'\n+13208 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-130D9 Compression Method    0008 (8) 'Deflated'\n-130DB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-130DF CRC                   A5C33F03 (2781036291)\n-130E3 Compressed Size       0000096F (2415)\n-130E7 Uncompressed Size     00001F52 (8018)\n-130EB Filename Length       0032 (50)\n-130ED Extra Length          0000 (0)\n-130EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1320A Compression Method    0008 (8) 'Deflated'\n+1320C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+13210 CRC                   62F535FA (1660237306)\n+13214 Compressed Size       00000980 (2432)\n+13218 Uncompressed Size     00002022 (8226)\n+1321C Filename Length       0032 (50)\n+1321E Extra Length          0000 (0)\n+13220 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x130EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x13220: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13121 PAYLOAD\n+13252 PAYLOAD\n \n-13A90 LOCAL HEADER #84      04034B50 (67324752)\n-13A94 Extract Zip Spec      14 (20) '2.0'\n-13A95 Extract OS            00 (0) 'MS-DOS'\n-13A96 General Purpose Flag  0800 (2048)\n+13BD2 LOCAL HEADER #84      04034B50 (67324752)\n+13BD6 Extract Zip Spec      14 (20) '2.0'\n+13BD7 Extract OS            00 (0) 'MS-DOS'\n+13BD8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-13A98 Compression Method    0008 (8) 'Deflated'\n-13A9A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-13A9E CRC                   861CA040 (2250022976)\n-13AA2 Compressed Size       00000567 (1383)\n-13AA6 Uncompressed Size     000010FE (4350)\n-13AAA Filename Length       0033 (51)\n-13AAC Extra Length          0000 (0)\n-13AAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+13BDA Compression Method    0008 (8) 'Deflated'\n+13BDC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+13BE0 CRC                   56578DF7 (1448578551)\n+13BE4 Compressed Size       00000572 (1394)\n+13BE8 Uncompressed Size     00001172 (4466)\n+13BEC Filename Length       0033 (51)\n+13BEE Extra Length          0000 (0)\n+13BF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x13AAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x13BF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13AE1 PAYLOAD\n+13C23 PAYLOAD\n \n-14048 LOCAL HEADER #85      04034B50 (67324752)\n-1404C Extract Zip Spec      14 (20) '2.0'\n-1404D Extract OS            00 (0) 'MS-DOS'\n-1404E General Purpose Flag  0800 (2048)\n+14195 LOCAL HEADER #85      04034B50 (67324752)\n+14199 Extract Zip Spec      14 (20) '2.0'\n+1419A Extract OS            00 (0) 'MS-DOS'\n+1419B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-14050 Compression Method    0008 (8) 'Deflated'\n-14052 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-14056 CRC                   1140D3D7 (289461207)\n-1405A Compressed Size       000008D2 (2258)\n-1405E Uncompressed Size     000021E4 (8676)\n-14062 Filename Length       0038 (56)\n-14064 Extra Length          0000 (0)\n-14066 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1419D Compression Method    0008 (8) 'Deflated'\n+1419F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+141A3 CRC                   1140D3D7 (289461207)\n+141A7 Compressed Size       000008D2 (2258)\n+141AB Uncompressed Size     000021E4 (8676)\n+141AF Filename Length       0038 (56)\n+141B1 Extra Length          0000 (0)\n+141B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x14066: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x141B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1409E PAYLOAD\n+141EB PAYLOAD\n \n-14970 LOCAL HEADER #86      04034B50 (67324752)\n-14974 Extract Zip Spec      14 (20) '2.0'\n-14975 Extract OS            00 (0) 'MS-DOS'\n-14976 General Purpose Flag  0800 (2048)\n+14ABD LOCAL HEADER #86      04034B50 (67324752)\n+14AC1 Extract Zip Spec      14 (20) '2.0'\n+14AC2 Extract OS            00 (0) 'MS-DOS'\n+14AC3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-14978 Compression Method    0008 (8) 'Deflated'\n-1497A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1497E CRC                   90398B66 (2419690342)\n-14982 Compressed Size       00000500 (1280)\n-14986 Uncompressed Size     00000F56 (3926)\n-1498A Filename Length       0035 (53)\n-1498C Extra Length          0000 (0)\n-1498E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+14AC5 Compression Method    0008 (8) 'Deflated'\n+14AC7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+14ACB CRC                   B6A13567 (3064018279)\n+14ACF Compressed Size       0000050A (1290)\n+14AD3 Uncompressed Size     00000FBC (4028)\n+14AD7 Filename Length       0035 (53)\n+14AD9 Extra Length          0000 (0)\n+14ADB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1498E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x14ADB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-149C3 PAYLOAD\n+14B10 PAYLOAD\n \n-14EC3 LOCAL HEADER #87      04034B50 (67324752)\n-14EC7 Extract Zip Spec      14 (20) '2.0'\n-14EC8 Extract OS            00 (0) 'MS-DOS'\n-14EC9 General Purpose Flag  0800 (2048)\n+1501A LOCAL HEADER #87      04034B50 (67324752)\n+1501E Extract Zip Spec      14 (20) '2.0'\n+1501F Extract OS            00 (0) 'MS-DOS'\n+15020 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-14ECB Compression Method    0008 (8) 'Deflated'\n-14ECD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-14ED1 CRC                   8054E5B8 (2153047480)\n-14ED5 Compressed Size       00000439 (1081)\n-14ED9 Uncompressed Size     00000FA9 (4009)\n-14EDD Filename Length       002D (45)\n-14EDF Extra Length          0000 (0)\n-14EE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15022 Compression Method    0008 (8) 'Deflated'\n+15024 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15028 CRC                   0A163D1E (169229598)\n+1502C Compressed Size       00000444 (1092)\n+15030 Uncompressed Size     0000101E (4126)\n+15034 Filename Length       002D (45)\n+15036 Extra Length          0000 (0)\n+15038 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x14EE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15038: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-14F0E PAYLOAD\n+15065 PAYLOAD\n \n-15347 LOCAL HEADER #88      04034B50 (67324752)\n-1534B Extract Zip Spec      14 (20) '2.0'\n-1534C Extract OS            00 (0) 'MS-DOS'\n-1534D General Purpose Flag  0800 (2048)\n+154A9 LOCAL HEADER #88      04034B50 (67324752)\n+154AD Extract Zip Spec      14 (20) '2.0'\n+154AE Extract OS            00 (0) 'MS-DOS'\n+154AF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1534F Compression Method    0008 (8) 'Deflated'\n-15351 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15355 CRC                   873A5673 (2268747379)\n-15359 Compressed Size       000002EA (746)\n-1535D Uncompressed Size     0000072D (1837)\n-15361 Filename Length       0031 (49)\n-15363 Extra Length          0000 (0)\n-15365 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+154B1 Compression Method    0008 (8) 'Deflated'\n+154B3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+154B7 CRC                   873A5673 (2268747379)\n+154BB Compressed Size       000002EA (746)\n+154BF Uncompressed Size     0000072D (1837)\n+154C3 Filename Length       0031 (49)\n+154C5 Extra Length          0000 (0)\n+154C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15365: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x154C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15396 PAYLOAD\n+154F8 PAYLOAD\n \n-15680 LOCAL HEADER #89      04034B50 (67324752)\n-15684 Extract Zip Spec      14 (20) '2.0'\n-15685 Extract OS            00 (0) 'MS-DOS'\n-15686 General Purpose Flag  0800 (2048)\n+157E2 LOCAL HEADER #89      04034B50 (67324752)\n+157E6 Extract Zip Spec      14 (20) '2.0'\n+157E7 Extract OS            00 (0) 'MS-DOS'\n+157E8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15688 Compression Method    0008 (8) 'Deflated'\n-1568A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1568E CRC                   B63E72D7 (3057545943)\n-15692 Compressed Size       0000049E (1182)\n-15696 Uncompressed Size     00000D50 (3408)\n-1569A Filename Length       0038 (56)\n-1569C Extra Length          0000 (0)\n-1569E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+157EA Compression Method    0008 (8) 'Deflated'\n+157EC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+157F0 CRC                   B63E72D7 (3057545943)\n+157F4 Compressed Size       0000049E (1182)\n+157F8 Uncompressed Size     00000D50 (3408)\n+157FC Filename Length       0038 (56)\n+157FE Extra Length          0000 (0)\n+15800 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1569E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15800: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-156D6 PAYLOAD\n+15838 PAYLOAD\n \n-15B74 LOCAL HEADER #90      04034B50 (67324752)\n-15B78 Extract Zip Spec      14 (20) '2.0'\n-15B79 Extract OS            00 (0) 'MS-DOS'\n-15B7A General Purpose Flag  0800 (2048)\n+15CD6 LOCAL HEADER #90      04034B50 (67324752)\n+15CDA Extract Zip Spec      14 (20) '2.0'\n+15CDB Extract OS            00 (0) 'MS-DOS'\n+15CDC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15B7C Compression Method    0008 (8) 'Deflated'\n-15B7E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15B82 CRC                   C40EC84E (3289303118)\n-15B86 Compressed Size       00000434 (1076)\n-15B8A Uncompressed Size     00000D18 (3352)\n-15B8E Filename Length       003A (58)\n-15B90 Extra Length          0000 (0)\n-15B92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15CDE Compression Method    0008 (8) 'Deflated'\n+15CE0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15CE4 CRC                   C40EC84E (3289303118)\n+15CE8 Compressed Size       00000434 (1076)\n+15CEC Uncompressed Size     00000D18 (3352)\n+15CF0 Filename Length       003A (58)\n+15CF2 Extra Length          0000 (0)\n+15CF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15B92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15CF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15BCC PAYLOAD\n+15D2E PAYLOAD\n \n-16000 LOCAL HEADER #91      04034B50 (67324752)\n-16004 Extract Zip Spec      14 (20) '2.0'\n-16005 Extract OS            00 (0) 'MS-DOS'\n-16006 General Purpose Flag  0800 (2048)\n+16162 LOCAL HEADER #91      04034B50 (67324752)\n+16166 Extract Zip Spec      14 (20) '2.0'\n+16167 Extract OS            00 (0) 'MS-DOS'\n+16168 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16008 Compression Method    0008 (8) 'Deflated'\n-1600A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1600E CRC                   7D5510EE (2102726894)\n-16012 Compressed Size       000004C7 (1223)\n-16016 Uncompressed Size     00000DAE (3502)\n-1601A Filename Length       0036 (54)\n-1601C Extra Length          0000 (0)\n-1601E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1616A Compression Method    0008 (8) 'Deflated'\n+1616C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16170 CRC                   3F21380C (1059141644)\n+16174 Compressed Size       000004D3 (1235)\n+16178 Uncompressed Size     00000E11 (3601)\n+1617C Filename Length       0036 (54)\n+1617E Extra Length          0000 (0)\n+16180 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1601E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16180: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-16054 PAYLOAD\n+161B6 PAYLOAD\n \n-1651B LOCAL HEADER #92      04034B50 (67324752)\n-1651F Extract Zip Spec      14 (20) '2.0'\n-16520 Extract OS            00 (0) 'MS-DOS'\n-16521 General Purpose Flag  0800 (2048)\n+16689 LOCAL HEADER #92      04034B50 (67324752)\n+1668D Extract Zip Spec      14 (20) '2.0'\n+1668E Extract OS            00 (0) 'MS-DOS'\n+1668F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16523 Compression Method    0008 (8) 'Deflated'\n-16525 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16529 CRC                   FC4D9CC7 (4232944839)\n-1652D Compressed Size       00000238 (568)\n-16531 Uncompressed Size     00000409 (1033)\n-16535 Filename Length       0035 (53)\n-16537 Extra Length          0000 (0)\n-16539 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16691 Compression Method    0008 (8) 'Deflated'\n+16693 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16697 CRC                   49F89DC8 (1241030088)\n+1669B Compressed Size       0000023F (575)\n+1669F Uncompressed Size     0000041E (1054)\n+166A3 Filename Length       0035 (53)\n+166A5 Extra Length          0000 (0)\n+166A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16539: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x166A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1656E PAYLOAD\n+166DC PAYLOAD\n \n-167A6 LOCAL HEADER #93      04034B50 (67324752)\n-167AA Extract Zip Spec      14 (20) '2.0'\n-167AB Extract OS            00 (0) 'MS-DOS'\n-167AC General Purpose Flag  0800 (2048)\n+1691B LOCAL HEADER #93      04034B50 (67324752)\n+1691F Extract Zip Spec      14 (20) '2.0'\n+16920 Extract OS            00 (0) 'MS-DOS'\n+16921 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-167AE Compression Method    0008 (8) 'Deflated'\n-167B0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-167B4 CRC                   E40DEA4B (3826117195)\n-167B8 Compressed Size       000004B6 (1206)\n-167BC Uncompressed Size     00000CAE (3246)\n-167C0 Filename Length       0034 (52)\n-167C2 Extra Length          0000 (0)\n-167C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16923 Compression Method    0008 (8) 'Deflated'\n+16925 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16929 CRC                   E40DEA4B (3826117195)\n+1692D Compressed Size       000004B6 (1206)\n+16931 Uncompressed Size     00000CAE (3246)\n+16935 Filename Length       0034 (52)\n+16937 Extra Length          0000 (0)\n+16939 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x167C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16939: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-167F8 PAYLOAD\n+1696D PAYLOAD\n \n-16CAE LOCAL HEADER #94      04034B50 (67324752)\n-16CB2 Extract Zip Spec      14 (20) '2.0'\n-16CB3 Extract OS            00 (0) 'MS-DOS'\n-16CB4 General Purpose Flag  0800 (2048)\n+16E23 LOCAL HEADER #94      04034B50 (67324752)\n+16E27 Extract Zip Spec      14 (20) '2.0'\n+16E28 Extract OS            00 (0) 'MS-DOS'\n+16E29 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16CB6 Compression Method    0008 (8) 'Deflated'\n-16CB8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16CBC CRC                   7B8AE3FF (2072699903)\n-16CC0 Compressed Size       00000662 (1634)\n-16CC4 Uncompressed Size     000012F0 (4848)\n-16CC8 Filename Length       0034 (52)\n-16CCA Extra Length          0000 (0)\n-16CCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16E2B Compression Method    0008 (8) 'Deflated'\n+16E2D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16E31 CRC                   09E32673 (165881459)\n+16E35 Compressed Size       0000066E (1646)\n+16E39 Uncompressed Size     0000136F (4975)\n+16E3D Filename Length       0034 (52)\n+16E3F Extra Length          0000 (0)\n+16E41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16CCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16E41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-16D00 PAYLOAD\n+16E75 PAYLOAD\n \n-17362 LOCAL HEADER #95      04034B50 (67324752)\n-17366 Extract Zip Spec      14 (20) '2.0'\n-17367 Extract OS            00 (0) 'MS-DOS'\n-17368 General Purpose Flag  0800 (2048)\n+174E3 LOCAL HEADER #95      04034B50 (67324752)\n+174E7 Extract Zip Spec      14 (20) '2.0'\n+174E8 Extract OS            00 (0) 'MS-DOS'\n+174E9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1736A Compression Method    0008 (8) 'Deflated'\n-1736C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17370 CRC                   19702ABA (426781370)\n-17374 Compressed Size       00000542 (1346)\n-17378 Uncompressed Size     00000F11 (3857)\n-1737C Filename Length       0038 (56)\n-1737E Extra Length          0000 (0)\n-17380 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+174EB Compression Method    0008 (8) 'Deflated'\n+174ED Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+174F1 CRC                   BE828C08 (3196226568)\n+174F5 Compressed Size       0000054D (1357)\n+174F9 Uncompressed Size     00000F73 (3955)\n+174FD Filename Length       0038 (56)\n+174FF Extra Length          0000 (0)\n+17501 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17380: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17501: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-173B8 PAYLOAD\n+17539 PAYLOAD\n \n-178FA LOCAL HEADER #96      04034B50 (67324752)\n-178FE Extract Zip Spec      14 (20) '2.0'\n-178FF Extract OS            00 (0) 'MS-DOS'\n-17900 General Purpose Flag  0800 (2048)\n+17A86 LOCAL HEADER #96      04034B50 (67324752)\n+17A8A Extract Zip Spec      14 (20) '2.0'\n+17A8B Extract OS            00 (0) 'MS-DOS'\n+17A8C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17902 Compression Method    0008 (8) 'Deflated'\n-17904 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17908 CRC                   763975AF (1983477167)\n-1790C Compressed Size       000003C2 (962)\n-17910 Uncompressed Size     000008BC (2236)\n-17914 Filename Length       003F (63)\n-17916 Extra Length          0000 (0)\n-17918 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17A8E Compression Method    0008 (8) 'Deflated'\n+17A90 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17A94 CRC                   33B08A9A (867207834)\n+17A98 Compressed Size       000003CA (970)\n+17A9C Uncompressed Size     000008F0 (2288)\n+17AA0 Filename Length       003F (63)\n+17AA2 Extra Length          0000 (0)\n+17AA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17918: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17AA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-17957 PAYLOAD\n+17AE3 PAYLOAD\n \n-17D19 LOCAL HEADER #97      04034B50 (67324752)\n-17D1D Extract Zip Spec      14 (20) '2.0'\n-17D1E Extract OS            00 (0) 'MS-DOS'\n-17D1F General Purpose Flag  0800 (2048)\n+17EAD LOCAL HEADER #97      04034B50 (67324752)\n+17EB1 Extract Zip Spec      14 (20) '2.0'\n+17EB2 Extract OS            00 (0) 'MS-DOS'\n+17EB3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17D21 Compression Method    0008 (8) 'Deflated'\n-17D23 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17D27 CRC                   776F6B16 (2003790614)\n-17D2B Compressed Size       00000391 (913)\n-17D2F Uncompressed Size     0000084C (2124)\n-17D33 Filename Length       0033 (51)\n-17D35 Extra Length          0000 (0)\n-17D37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17EB5 Compression Method    0008 (8) 'Deflated'\n+17EB7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17EBB CRC                   776F6B16 (2003790614)\n+17EBF Compressed Size       00000391 (913)\n+17EC3 Uncompressed Size     0000084C (2124)\n+17EC7 Filename Length       0033 (51)\n+17EC9 Extra Length          0000 (0)\n+17ECB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17D37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17ECB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-17D6A PAYLOAD\n+17EFE PAYLOAD\n \n-180FB LOCAL HEADER #98      04034B50 (67324752)\n-180FF Extract Zip Spec      14 (20) '2.0'\n-18100 Extract OS            00 (0) 'MS-DOS'\n-18101 General Purpose Flag  0800 (2048)\n+1828F LOCAL HEADER #98      04034B50 (67324752)\n+18293 Extract Zip Spec      14 (20) '2.0'\n+18294 Extract OS            00 (0) 'MS-DOS'\n+18295 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-18103 Compression Method    0008 (8) 'Deflated'\n-18105 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-18109 CRC                   A1EB5EED (2716557037)\n-1810D Compressed Size       000006D3 (1747)\n-18111 Uncompressed Size     000016D2 (5842)\n-18115 Filename Length       003F (63)\n-18117 Extra Length          0000 (0)\n-18119 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+18297 Compression Method    0008 (8) 'Deflated'\n+18299 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1829D CRC                   A1EB5EED (2716557037)\n+182A1 Compressed Size       000006D3 (1747)\n+182A5 Uncompressed Size     000016D2 (5842)\n+182A9 Filename Length       003F (63)\n+182AB Extra Length          0000 (0)\n+182AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x18119: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x182AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-18158 PAYLOAD\n+182EC PAYLOAD\n \n-1882B LOCAL HEADER #99      04034B50 (67324752)\n-1882F Extract Zip Spec      14 (20) '2.0'\n-18830 Extract OS            00 (0) 'MS-DOS'\n-18831 General Purpose Flag  0800 (2048)\n+189BF LOCAL HEADER #99      04034B50 (67324752)\n+189C3 Extract Zip Spec      14 (20) '2.0'\n+189C4 Extract OS            00 (0) 'MS-DOS'\n+189C5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-18833 Compression Method    0008 (8) 'Deflated'\n-18835 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-18839 CRC                   71347931 (1899264305)\n-1883D Compressed Size       00000939 (2361)\n-18841 Uncompressed Size     00001EE7 (7911)\n-18845 Filename Length       002F (47)\n-18847 Extra Length          0000 (0)\n-18849 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+189C7 Compression Method    0008 (8) 'Deflated'\n+189C9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+189CD CRC                   93BDDA62 (2478692962)\n+189D1 Compressed Size       0000094C (2380)\n+189D5 Uncompressed Size     00002000 (8192)\n+189D9 Filename Length       002F (47)\n+189DB Extra Length          0000 (0)\n+189DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x18849: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x189DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-18878 PAYLOAD\n+18A0C PAYLOAD\n \n-191B1 LOCAL HEADER #100     04034B50 (67324752)\n-191B5 Extract Zip Spec      14 (20) '2.0'\n-191B6 Extract OS            00 (0) 'MS-DOS'\n-191B7 General Purpose Flag  0800 (2048)\n+19358 LOCAL HEADER #100     04034B50 (67324752)\n+1935C Extract Zip Spec      14 (20) '2.0'\n+1935D Extract OS            00 (0) 'MS-DOS'\n+1935E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-191B9 Compression Method    0008 (8) 'Deflated'\n-191BB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-191BF CRC                   E459791A (3831068954)\n-191C3 Compressed Size       00000B02 (2818)\n-191C7 Uncompressed Size     00002B55 (11093)\n-191CB Filename Length       002D (45)\n-191CD Extra Length          0000 (0)\n-191CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+19360 Compression Method    0008 (8) 'Deflated'\n+19362 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+19366 CRC                   E459791A (3831068954)\n+1936A Compressed Size       00000B02 (2818)\n+1936E Uncompressed Size     00002B55 (11093)\n+19372 Filename Length       002D (45)\n+19374 Extra Length          0000 (0)\n+19376 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x191CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x19376: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-191FC PAYLOAD\n+193A3 PAYLOAD\n \n-19CFE LOCAL HEADER #101     04034B50 (67324752)\n-19D02 Extract Zip Spec      14 (20) '2.0'\n-19D03 Extract OS            00 (0) 'MS-DOS'\n-19D04 General Purpose Flag  0800 (2048)\n+19EA5 LOCAL HEADER #101     04034B50 (67324752)\n+19EA9 Extract Zip Spec      14 (20) '2.0'\n+19EAA Extract OS            00 (0) 'MS-DOS'\n+19EAB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-19D06 Compression Method    0008 (8) 'Deflated'\n-19D08 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-19D0C CRC                   80C30D3D (2160266557)\n-19D10 Compressed Size       000002F8 (760)\n-19D14 Uncompressed Size     0000065E (1630)\n-19D18 Filename Length       002E (46)\n-19D1A Extra Length          0000 (0)\n-19D1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+19EAD Compression Method    0008 (8) 'Deflated'\n+19EAF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+19EB3 CRC                   80C30D3D (2160266557)\n+19EB7 Compressed Size       000002F8 (760)\n+19EBB Uncompressed Size     0000065E (1630)\n+19EBF Filename Length       002E (46)\n+19EC1 Extra Length          0000 (0)\n+19EC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x19D1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x19EC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-19D4A PAYLOAD\n+19EF1 PAYLOAD\n \n-1A042 LOCAL HEADER #102     04034B50 (67324752)\n-1A046 Extract Zip Spec      14 (20) '2.0'\n-1A047 Extract OS            00 (0) 'MS-DOS'\n-1A048 General Purpose Flag  0800 (2048)\n+1A1E9 LOCAL HEADER #102     04034B50 (67324752)\n+1A1ED Extract Zip Spec      14 (20) '2.0'\n+1A1EE Extract OS            00 (0) 'MS-DOS'\n+1A1EF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1A04A Compression Method    0008 (8) 'Deflated'\n-1A04C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1A050 CRC                   613BF150 (1631318352)\n-1A054 Compressed Size       0000097B (2427)\n-1A058 Uncompressed Size     00002B36 (11062)\n-1A05C Filename Length       002A (42)\n-1A05E Extra Length          0000 (0)\n-1A060 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1A1F1 Compression Method    0008 (8) 'Deflated'\n+1A1F3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1A1F7 CRC                   8E103737 (2383427383)\n+1A1FB Compressed Size       0000098B (2443)\n+1A1FF Uncompressed Size     00002C47 (11335)\n+1A203 Filename Length       002A (42)\n+1A205 Extra Length          0000 (0)\n+1A207 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1A060: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1A207: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1A08A PAYLOAD\n+1A231 PAYLOAD\n \n-1AA05 LOCAL HEADER #103     04034B50 (67324752)\n-1AA09 Extract Zip Spec      14 (20) '2.0'\n-1AA0A Extract OS            00 (0) 'MS-DOS'\n-1AA0B General Purpose Flag  0800 (2048)\n+1ABBC LOCAL HEADER #103     04034B50 (67324752)\n+1ABC0 Extract Zip Spec      14 (20) '2.0'\n+1ABC1 Extract OS            00 (0) 'MS-DOS'\n+1ABC2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1AA0D Compression Method    0008 (8) 'Deflated'\n-1AA0F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1AA13 CRC                   2F9D6707 (798844679)\n-1AA17 Compressed Size       000000D3 (211)\n-1AA1B Uncompressed Size     00000334 (820)\n-1AA1F Filename Length       0033 (51)\n-1AA21 Extra Length          0000 (0)\n-1AA23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1ABC4 Compression Method    0008 (8) 'Deflated'\n+1ABC6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1ABCA CRC                   2F9D6707 (798844679)\n+1ABCE Compressed Size       000000D3 (211)\n+1ABD2 Uncompressed Size     00000334 (820)\n+1ABD6 Filename Length       0033 (51)\n+1ABD8 Extra Length          0000 (0)\n+1ABDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1AA23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1ABDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1AA56 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1AC0D PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-1AB29 LOCAL HEADER #104     04034B50 (67324752)\n-1AB2D Extract Zip Spec      14 (20) '2.0'\n-1AB2E Extract OS            00 (0) 'MS-DOS'\n-1AB2F General Purpose Flag  0800 (2048)\n+1ACE0 LOCAL HEADER #104     04034B50 (67324752)\n+1ACE4 Extract Zip Spec      14 (20) '2.0'\n+1ACE5 Extract OS            00 (0) 'MS-DOS'\n+1ACE6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1AB31 Compression Method    0008 (8) 'Deflated'\n-1AB33 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1AB37 CRC                   59884A10 (1502104080)\n-1AB3B Compressed Size       00000038 (56)\n-1AB3F Uncompressed Size     00000042 (66)\n-1AB43 Filename Length       003C (60)\n-1AB45 Extra Length          0000 (0)\n-1AB47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1ACE8 Compression Method    0008 (8) 'Deflated'\n+1ACEA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1ACEE CRC                   59884A10 (1502104080)\n+1ACF2 Compressed Size       00000038 (56)\n+1ACF6 Uncompressed Size     00000042 (66)\n+1ACFA Filename Length       003C (60)\n+1ACFC Extra Length          0000 (0)\n+1ACFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1AB47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1ACFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1AB83 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1AD3A PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-1ABBB LOCAL HEADER #105     04034B50 (67324752)\n-1ABBF Extract Zip Spec      14 (20) '2.0'\n-1ABC0 Extract OS            00 (0) 'MS-DOS'\n-1ABC1 General Purpose Flag  0800 (2048)\n+1AD72 LOCAL HEADER #105     04034B50 (67324752)\n+1AD76 Extract Zip Spec      14 (20) '2.0'\n+1AD77 Extract OS            00 (0) 'MS-DOS'\n+1AD78 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1ABC3 Compression Method    0008 (8) 'Deflated'\n-1ABC5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1ABC9 CRC                   A08C1C8C (2693536908)\n-1ABCD Compressed Size       00000056 (86)\n-1ABD1 Uncompressed Size     000000AA (170)\n-1ABD5 Filename Length       0035 (53)\n-1ABD7 Extra Length          0000 (0)\n-1ABD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1AD7A Compression Method    0008 (8) 'Deflated'\n+1AD7C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1AD80 CRC                   A08C1C8C (2693536908)\n+1AD84 Compressed Size       00000056 (86)\n+1AD88 Uncompressed Size     000000AA (170)\n+1AD8C Filename Length       0035 (53)\n+1AD8E Extra Length          0000 (0)\n+1AD90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1ABD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1AD90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1AC0E PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1ADC5 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-1AC64 LOCAL HEADER #106     04034B50 (67324752)\n-1AC68 Extract Zip Spec      14 (20) '2.0'\n-1AC69 Extract OS            00 (0) 'MS-DOS'\n-1AC6A General Purpose Flag  0800 (2048)\n+1AE1B LOCAL HEADER #106     04034B50 (67324752)\n+1AE1F Extract Zip Spec      14 (20) '2.0'\n+1AE20 Extract OS            00 (0) 'MS-DOS'\n+1AE21 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1AC6C Compression Method    0008 (8) 'Deflated'\n-1AC6E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1AC72 CRC                   B40DDFAC (3020808108)\n-1AC76 Compressed Size       0000005D (93)\n-1AC7A Uncompressed Size     000000B9 (185)\n-1AC7E Filename Length       0039 (57)\n-1AC80 Extra Length          0000 (0)\n-1AC82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1AE23 Compression Method    0008 (8) 'Deflated'\n+1AE25 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1AE29 CRC                   B40DDFAC (3020808108)\n+1AE2D Compressed Size       0000005D (93)\n+1AE31 Uncompressed Size     000000B9 (185)\n+1AE35 Filename Length       0039 (57)\n+1AE37 Extra Length          0000 (0)\n+1AE39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1AC82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1AE39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1ACBB PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1AE72 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-1AD18 LOCAL HEADER #107     04034B50 (67324752)\n-1AD1C Extract Zip Spec      14 (20) '2.0'\n-1AD1D Extract OS            00 (0) 'MS-DOS'\n-1AD1E General Purpose Flag  0800 (2048)\n+1AECF LOCAL HEADER #107     04034B50 (67324752)\n+1AED3 Extract Zip Spec      14 (20) '2.0'\n+1AED4 Extract OS            00 (0) 'MS-DOS'\n+1AED5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1AD20 Compression Method    0008 (8) 'Deflated'\n-1AD22 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1AD26 CRC                   0FC7AABB (264743611)\n-1AD2A Compressed Size       0000039A (922)\n-1AD2E Uncompressed Size     000009B0 (2480)\n-1AD32 Filename Length       0035 (53)\n-1AD34 Extra Length          0000 (0)\n-1AD36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1AED7 Compression Method    0008 (8) 'Deflated'\n+1AED9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1AEDD CRC                   A1CBD481 (2714489985)\n+1AEE1 Compressed Size       00000393 (915)\n+1AEE5 Uncompressed Size     00000971 (2417)\n+1AEE9 Filename Length       0035 (53)\n+1AEEB Extra Length          0000 (0)\n+1AEED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1AD36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1AEED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1AD6B PAYLOAD\n+1AF22 PAYLOAD\n \n-1B105 LOCAL HEADER #108     04034B50 (67324752)\n-1B109 Extract Zip Spec      14 (20) '2.0'\n-1B10A Extract OS            00 (0) 'MS-DOS'\n-1B10B General Purpose Flag  0800 (2048)\n+1B2B5 LOCAL HEADER #108     04034B50 (67324752)\n+1B2B9 Extract Zip Spec      14 (20) '2.0'\n+1B2BA Extract OS            00 (0) 'MS-DOS'\n+1B2BB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B10D Compression Method    0008 (8) 'Deflated'\n-1B10F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B113 CRC                   5F285EB1 (1596481201)\n-1B117 Compressed Size       00000042 (66)\n-1B11B Uncompressed Size     00000044 (68)\n-1B11F Filename Length       003C (60)\n-1B121 Extra Length          0000 (0)\n-1B123 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B2BD Compression Method    0008 (8) 'Deflated'\n+1B2BF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B2C3 CRC                   5F285EB1 (1596481201)\n+1B2C7 Compressed Size       00000042 (66)\n+1B2CB Uncompressed Size     00000044 (68)\n+1B2CF Filename Length       003C (60)\n+1B2D1 Extra Length          0000 (0)\n+1B2D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B123: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B2D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1B15F PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1B30F PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-1B1A1 CENTRAL HEADER #1     02014B50 (33639248)\n-1B1A5 Created Zip Spec      14 (20) '2.0'\n-1B1A6 Created OS            03 (3) 'Unix'\n-1B1A7 Extract Zip Spec      14 (20) '2.0'\n-1B1A8 Extract OS            00 (0) 'MS-DOS'\n-1B1A9 General Purpose Flag  0800 (2048)\n+1B351 CENTRAL HEADER #1     02014B50 (33639248)\n+1B355 Created Zip Spec      14 (20) '2.0'\n+1B356 Created OS            03 (3) 'Unix'\n+1B357 Extract Zip Spec      14 (20) '2.0'\n+1B358 Extract OS            00 (0) 'MS-DOS'\n+1B359 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B1AB Compression Method    0008 (8) 'Deflated'\n-1B1AD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B1B1 CRC                   A689EB18 (2794056472)\n-1B1B5 Compressed Size       00000042 (66)\n-1B1B9 Uncompressed Size     00000040 (64)\n-1B1BD Filename Length       0014 (20)\n-1B1BF Extra Length          0000 (0)\n-1B1C1 Comment Length        0000 (0)\n-1B1C3 Disk Start            0000 (0)\n-1B1C5 Int File Attributes   0000 (0)\n+1B35B Compression Method    0008 (8) 'Deflated'\n+1B35D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B361 CRC                   A689EB18 (2794056472)\n+1B365 Compressed Size       00000042 (66)\n+1B369 Uncompressed Size     00000040 (64)\n+1B36D Filename Length       0014 (20)\n+1B36F Extra Length          0000 (0)\n+1B371 Comment Length        0000 (0)\n+1B373 Disk Start            0000 (0)\n+1B375 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B1C7 Ext File Attributes   81A40000 (2175008768)\n+1B377 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-1B1CB Local Header Offset   00000000 (0)\n-1B1CF Filename              'XXXXXXXXXXXXXXXXXXXX'\n+1B37B Local Header Offset   00000000 (0)\n+1B37F Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B1CF: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B37F: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1B1E3 CENTRAL HEADER #2     02014B50 (33639248)\n-1B1E7 Created Zip Spec      14 (20) '2.0'\n-1B1E8 Created OS            03 (3) 'Unix'\n-1B1E9 Extract Zip Spec      0A (10) '1.0'\n-1B1EA Extract OS            00 (0) 'MS-DOS'\n-1B1EB General Purpose Flag  0800 (2048)\n+1B393 CENTRAL HEADER #2     02014B50 (33639248)\n+1B397 Created Zip Spec      14 (20) '2.0'\n+1B398 Created OS            03 (3) 'Unix'\n+1B399 Extract Zip Spec      0A (10) '1.0'\n+1B39A Extract OS            00 (0) 'MS-DOS'\n+1B39B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-1B1ED Compression Method    0000 (0) 'Stored'\n-1B1EF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B1F3 CRC                   00000000 (0)\n-1B1F7 Compressed Size       00000000 (0)\n-1B1FB Uncompressed Size     00000000 (0)\n-1B1FF Filename Length       0009 (9)\n-1B201 Extra Length          0000 (0)\n-1B203 Comment Length        0000 (0)\n-1B205 Disk Start            0000 (0)\n-1B207 Int File Attributes   0000 (0)\n+1B39D Compression Method    0000 (0) 'Stored'\n+1B39F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B3A3 CRC                   00000000 (0)\n+1B3A7 Compressed Size       00000000 (0)\n+1B3AB Uncompressed Size     00000000 (0)\n+1B3AF Filename Length       0009 (9)\n+1B3B1 Extra Length          0000 (0)\n+1B3B3 Comment Length        0000 (0)\n+1B3B5 Disk Start            0000 (0)\n+1B3B7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B209 Ext File Attributes   41ED0010 (1106051088)\n+1B3B9 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-1B20D Local Header Offset   00000074 (116)\n-1B211 Filename              'XXXXXXXXX'\n+1B3BD Local Header Offset   00000074 (116)\n+1B3C1 Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0x1B211: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0x1B3C1: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B211: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B3C1: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B1E9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0x1B399: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-1B21A CENTRAL HEADER #3     02014B50 (33639248)\n-1B21E Created Zip Spec      14 (20) '2.0'\n-1B21F Created OS            03 (3) 'Unix'\n-1B220 Extract Zip Spec      0A (10) '1.0'\n-1B221 Extract OS            00 (0) 'MS-DOS'\n-1B222 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B224 Compression Method    0000 (0) 'Stored'\n-1B226 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B22A CRC                   00000000 (0)\n-1B22E Compressed Size       00000000 (0)\n-1B232 Uncompressed Size     00000000 (0)\n-1B236 Filename Length       0004 (4)\n-1B238 Extra Length          0000 (0)\n-1B23A Comment Length        0000 (0)\n-1B23C Disk Start            0000 (0)\n-1B23E Int File Attributes   0000 (0)\n+1B3CA CENTRAL HEADER #3     02014B50 (33639248)\n+1B3CE Created Zip Spec      14 (20) '2.0'\n+1B3CF Created OS            03 (3) 'Unix'\n+1B3D0 Extract Zip Spec      0A (10) '1.0'\n+1B3D1 Extract OS            00 (0) 'MS-DOS'\n+1B3D2 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B3D4 Compression Method    0000 (0) 'Stored'\n+1B3D6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B3DA CRC                   00000000 (0)\n+1B3DE Compressed Size       00000000 (0)\n+1B3E2 Uncompressed Size     00000000 (0)\n+1B3E6 Filename Length       0004 (4)\n+1B3E8 Extra Length          0000 (0)\n+1B3EA Comment Length        0000 (0)\n+1B3EC Disk Start            0000 (0)\n+1B3EE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B240 Ext File Attributes   41ED0010 (1106051088)\n+1B3F0 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-1B244 Local Header Offset   0000009B (155)\n-1B248 Filename              'XXXX'\n+1B3F4 Local Header Offset   0000009B (155)\n+1B3F8 Filename              'XXXX'\n #\n-# WARNING: Offset 0x1B248: Filename 'XXXX'\n+# WARNING: Offset 0x1B3F8: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B248: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0x1B3F8: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B220: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0x1B3D0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-1B24C CENTRAL HEADER #4     02014B50 (33639248)\n-1B250 Created Zip Spec      14 (20) '2.0'\n-1B251 Created OS            03 (3) 'Unix'\n-1B252 Extract Zip Spec      0A (10) '1.0'\n-1B253 Extract OS            00 (0) 'MS-DOS'\n-1B254 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B256 Compression Method    0000 (0) 'Stored'\n-1B258 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B25C CRC                   00000000 (0)\n-1B260 Compressed Size       00000000 (0)\n-1B264 Uncompressed Size     00000000 (0)\n-1B268 Filename Length       000C (12)\n-1B26A Extra Length          0000 (0)\n-1B26C Comment Length        0000 (0)\n-1B26E Disk Start            0000 (0)\n-1B270 Int File Attributes   0000 (0)\n+1B3FC CENTRAL HEADER #4     02014B50 (33639248)\n+1B400 Created Zip Spec      14 (20) '2.0'\n+1B401 Created OS            03 (3) 'Unix'\n+1B402 Extract Zip Spec      0A (10) '1.0'\n+1B403 Extract OS            00 (0) 'MS-DOS'\n+1B404 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B406 Compression Method    0000 (0) 'Stored'\n+1B408 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B40C CRC                   00000000 (0)\n+1B410 Compressed Size       00000000 (0)\n+1B414 Uncompressed Size     00000000 (0)\n+1B418 Filename Length       000C (12)\n+1B41A Extra Length          0000 (0)\n+1B41C Comment Length        0000 (0)\n+1B41E Disk Start            0000 (0)\n+1B420 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B272 Ext File Attributes   41ED0010 (1106051088)\n+1B422 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-1B276 Local Header Offset   000000BD (189)\n-1B27A Filename              'XXXXXXXXXXXX'\n+1B426 Local Header Offset   000000BD (189)\n+1B42A Filename              'XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B27A: Filename 'XXXXXXXXXXXX'\n+# WARNING: Offset 0x1B42A: Filename 'XXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B27A: Directory 'XXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B42A: Directory 'XXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B252: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXX'\n+# WARNING: Offset 0x1B402: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXX'\n #\n \n-1B286 CENTRAL HEADER #5     02014B50 (33639248)\n-1B28A Created Zip Spec      14 (20) '2.0'\n-1B28B Created OS            03 (3) 'Unix'\n-1B28C Extract Zip Spec      0A (10) '1.0'\n-1B28D Extract OS            00 (0) 'MS-DOS'\n-1B28E General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B290 Compression Method    0000 (0) 'Stored'\n-1B292 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B296 CRC                   00000000 (0)\n-1B29A Compressed Size       00000000 (0)\n-1B29E Uncompressed Size     00000000 (0)\n-1B2A2 Filename Length       0012 (18)\n-1B2A4 Extra Length          0000 (0)\n-1B2A6 Comment Length        0000 (0)\n-1B2A8 Disk Start            0000 (0)\n-1B2AA Int File Attributes   0000 (0)\n+1B436 CENTRAL HEADER #5     02014B50 (33639248)\n+1B43A Created Zip Spec      14 (20) '2.0'\n+1B43B Created OS            03 (3) 'Unix'\n+1B43C Extract Zip Spec      0A (10) '1.0'\n+1B43D Extract OS            00 (0) 'MS-DOS'\n+1B43E General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B440 Compression Method    0000 (0) 'Stored'\n+1B442 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B446 CRC                   00000000 (0)\n+1B44A Compressed Size       00000000 (0)\n+1B44E Uncompressed Size     00000000 (0)\n+1B452 Filename Length       0012 (18)\n+1B454 Extra Length          0000 (0)\n+1B456 Comment Length        0000 (0)\n+1B458 Disk Start            0000 (0)\n+1B45A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B2AC Ext File Attributes   41ED0010 (1106051088)\n+1B45C 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-1B2B0 Local Header Offset   000000E7 (231)\n-1B2B4 Filename              'XXXXXXXXXXXXXXXXXX'\n+1B460 Local Header Offset   000000E7 (231)\n+1B464 Filename              'XXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B2B4: Filename 'XXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B464: Filename 'XXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B2B4: Directory 'XXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B464: Directory 'XXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B28C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B43C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXX'\n #\n \n-1B2C6 CENTRAL HEADER #6     02014B50 (33639248)\n-1B2CA Created Zip Spec      14 (20) '2.0'\n-1B2CB Created OS            03 (3) 'Unix'\n-1B2CC Extract Zip Spec      0A (10) '1.0'\n-1B2CD Extract OS            00 (0) 'MS-DOS'\n-1B2CE General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B2D0 Compression Method    0000 (0) 'Stored'\n-1B2D2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B2D6 CRC                   00000000 (0)\n-1B2DA Compressed Size       00000000 (0)\n-1B2DE Uncompressed Size     00000000 (0)\n-1B2E2 Filename Length       0016 (22)\n-1B2E4 Extra Length          0000 (0)\n-1B2E6 Comment Length        0000 (0)\n-1B2E8 Disk Start            0000 (0)\n-1B2EA Int File Attributes   0000 (0)\n+1B476 CENTRAL HEADER #6     02014B50 (33639248)\n+1B47A Created Zip Spec      14 (20) '2.0'\n+1B47B Created OS            03 (3) 'Unix'\n+1B47C Extract Zip Spec      0A (10) '1.0'\n+1B47D Extract OS            00 (0) 'MS-DOS'\n+1B47E General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B480 Compression Method    0000 (0) 'Stored'\n+1B482 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B486 CRC                   00000000 (0)\n+1B48A Compressed Size       00000000 (0)\n+1B48E Uncompressed Size     00000000 (0)\n+1B492 Filename Length       0016 (22)\n+1B494 Extra Length          0000 (0)\n+1B496 Comment Length        0000 (0)\n+1B498 Disk Start            0000 (0)\n+1B49A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B2EC Ext File Attributes   41ED0010 (1106051088)\n+1B49C 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-1B2F0 Local Header Offset   00000117 (279)\n-1B2F4 Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n+1B4A0 Local Header Offset   00000117 (279)\n+1B4A4 Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B2F4: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B4A4: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B2F4: Directory 'XXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B4A4: Directory 'XXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B2CC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B47C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B30A CENTRAL HEADER #7     02014B50 (33639248)\n-1B30E Created Zip Spec      14 (20) '2.0'\n-1B30F Created OS            03 (3) 'Unix'\n-1B310 Extract Zip Spec      0A (10) '1.0'\n-1B311 Extract OS            00 (0) 'MS-DOS'\n-1B312 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B314 Compression Method    0000 (0) 'Stored'\n-1B316 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B31A CRC                   00000000 (0)\n-1B31E Compressed Size       00000000 (0)\n-1B322 Uncompressed Size     00000000 (0)\n-1B326 Filename Length       001E (30)\n-1B328 Extra Length          0000 (0)\n-1B32A Comment Length        0000 (0)\n-1B32C Disk Start            0000 (0)\n-1B32E Int File Attributes   0000 (0)\n+1B4BA CENTRAL HEADER #7     02014B50 (33639248)\n+1B4BE Created Zip Spec      14 (20) '2.0'\n+1B4BF Created OS            03 (3) 'Unix'\n+1B4C0 Extract Zip Spec      0A (10) '1.0'\n+1B4C1 Extract OS            00 (0) 'MS-DOS'\n+1B4C2 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B4C4 Compression Method    0000 (0) 'Stored'\n+1B4C6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B4CA CRC                   00000000 (0)\n+1B4CE Compressed Size       00000000 (0)\n+1B4D2 Uncompressed Size     00000000 (0)\n+1B4D6 Filename Length       001E (30)\n+1B4D8 Extra Length          0000 (0)\n+1B4DA Comment Length        0000 (0)\n+1B4DC Disk Start            0000 (0)\n+1B4DE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B330 Ext File Attributes   41ED0010 (1106051088)\n+1B4E0 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-1B334 Local Header Offset   0000014B (331)\n-1B338 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B4E4 Local Header Offset   0000014B (331)\n+1B4E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B338: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B4E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B338: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B4E8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B310: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B4C0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B356 CENTRAL HEADER #8     02014B50 (33639248)\n-1B35A Created Zip Spec      14 (20) '2.0'\n-1B35B Created OS            03 (3) 'Unix'\n-1B35C Extract Zip Spec      0A (10) '1.0'\n-1B35D Extract OS            00 (0) 'MS-DOS'\n-1B35E General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B360 Compression Method    0000 (0) 'Stored'\n-1B362 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B366 CRC                   00000000 (0)\n-1B36A Compressed Size       00000000 (0)\n-1B36E Uncompressed Size     00000000 (0)\n-1B372 Filename Length       0004 (4)\n-1B374 Extra Length          0000 (0)\n-1B376 Comment Length        0000 (0)\n-1B378 Disk Start            0000 (0)\n-1B37A Int File Attributes   0000 (0)\n+1B506 CENTRAL HEADER #8     02014B50 (33639248)\n+1B50A Created Zip Spec      14 (20) '2.0'\n+1B50B Created OS            03 (3) 'Unix'\n+1B50C Extract Zip Spec      0A (10) '1.0'\n+1B50D Extract OS            00 (0) 'MS-DOS'\n+1B50E General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B510 Compression Method    0000 (0) 'Stored'\n+1B512 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B516 CRC                   00000000 (0)\n+1B51A Compressed Size       00000000 (0)\n+1B51E Uncompressed Size     00000000 (0)\n+1B522 Filename Length       0004 (4)\n+1B524 Extra Length          0000 (0)\n+1B526 Comment Length        0000 (0)\n+1B528 Disk Start            0000 (0)\n+1B52A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B37C Ext File Attributes   41ED0010 (1106051088)\n+1B52C 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-1B380 Local Header Offset   00000187 (391)\n-1B384 Filename              'XXXX'\n+1B530 Local Header Offset   00000187 (391)\n+1B534 Filename              'XXXX'\n #\n-# WARNING: Offset 0x1B384: Filename 'XXXX'\n+# WARNING: Offset 0x1B534: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B384: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0x1B534: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B35C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0x1B50C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-1B388 CENTRAL HEADER #9     02014B50 (33639248)\n-1B38C Created Zip Spec      14 (20) '2.0'\n-1B38D Created OS            03 (3) 'Unix'\n-1B38E Extract Zip Spec      0A (10) '1.0'\n-1B38F Extract OS            00 (0) 'MS-DOS'\n-1B390 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B392 Compression Method    0000 (0) 'Stored'\n-1B394 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B398 CRC                   00000000 (0)\n-1B39C Compressed Size       00000000 (0)\n-1B3A0 Uncompressed Size     00000000 (0)\n-1B3A4 Filename Length       000B (11)\n-1B3A6 Extra Length          0000 (0)\n-1B3A8 Comment Length        0000 (0)\n-1B3AA Disk Start            0000 (0)\n-1B3AC Int File Attributes   0000 (0)\n+1B538 CENTRAL HEADER #9     02014B50 (33639248)\n+1B53C Created Zip Spec      14 (20) '2.0'\n+1B53D Created OS            03 (3) 'Unix'\n+1B53E Extract Zip Spec      0A (10) '1.0'\n+1B53F Extract OS            00 (0) 'MS-DOS'\n+1B540 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B542 Compression Method    0000 (0) 'Stored'\n+1B544 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B548 CRC                   00000000 (0)\n+1B54C Compressed Size       00000000 (0)\n+1B550 Uncompressed Size     00000000 (0)\n+1B554 Filename Length       000B (11)\n+1B556 Extra Length          0000 (0)\n+1B558 Comment Length        0000 (0)\n+1B55A Disk Start            0000 (0)\n+1B55C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B3AE Ext File Attributes   41ED0010 (1106051088)\n+1B55E 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-1B3B2 Local Header Offset   000001A9 (425)\n-1B3B6 Filename              'XXXXXXXXXXX'\n+1B562 Local Header Offset   000001A9 (425)\n+1B566 Filename              'XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B3B6: Filename 'XXXXXXXXXXX'\n+# WARNING: Offset 0x1B566: Filename 'XXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B3B6: Directory 'XXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B566: Directory 'XXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B38E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n+# WARNING: Offset 0x1B53E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n #\n \n-1B3C1 CENTRAL HEADER #10    02014B50 (33639248)\n-1B3C5 Created Zip Spec      14 (20) '2.0'\n-1B3C6 Created OS            03 (3) 'Unix'\n-1B3C7 Extract Zip Spec      0A (10) '1.0'\n-1B3C8 Extract OS            00 (0) 'MS-DOS'\n-1B3C9 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B3CB Compression Method    0000 (0) 'Stored'\n-1B3CD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B3D1 CRC                   00000000 (0)\n-1B3D5 Compressed Size       00000000 (0)\n-1B3D9 Uncompressed Size     00000000 (0)\n-1B3DD Filename Length       0011 (17)\n-1B3DF Extra Length          0000 (0)\n-1B3E1 Comment Length        0000 (0)\n-1B3E3 Disk Start            0000 (0)\n-1B3E5 Int File Attributes   0000 (0)\n+1B571 CENTRAL HEADER #10    02014B50 (33639248)\n+1B575 Created Zip Spec      14 (20) '2.0'\n+1B576 Created OS            03 (3) 'Unix'\n+1B577 Extract Zip Spec      0A (10) '1.0'\n+1B578 Extract OS            00 (0) 'MS-DOS'\n+1B579 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B57B Compression Method    0000 (0) 'Stored'\n+1B57D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B581 CRC                   00000000 (0)\n+1B585 Compressed Size       00000000 (0)\n+1B589 Uncompressed Size     00000000 (0)\n+1B58D Filename Length       0011 (17)\n+1B58F Extra Length          0000 (0)\n+1B591 Comment Length        0000 (0)\n+1B593 Disk Start            0000 (0)\n+1B595 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B3E7 Ext File Attributes   41ED0010 (1106051088)\n+1B597 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-1B3EB Local Header Offset   000001D2 (466)\n-1B3EF Filename              'XXXXXXXXXXXXXXXXX'\n+1B59B Local Header Offset   000001D2 (466)\n+1B59F Filename              'XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B3EF: Filename 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B59F: Filename 'XXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B3EF: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B59F: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B3C7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B577: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n #\n \n-1B400 CENTRAL HEADER #11    02014B50 (33639248)\n-1B404 Created Zip Spec      14 (20) '2.0'\n-1B405 Created OS            03 (3) 'Unix'\n-1B406 Extract Zip Spec      0A (10) '1.0'\n-1B407 Extract OS            00 (0) 'MS-DOS'\n-1B408 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B40A Compression Method    0000 (0) 'Stored'\n-1B40C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B410 CRC                   00000000 (0)\n-1B414 Compressed Size       00000000 (0)\n-1B418 Uncompressed Size     00000000 (0)\n-1B41C Filename Length       0015 (21)\n-1B41E Extra Length          0000 (0)\n-1B420 Comment Length        0000 (0)\n-1B422 Disk Start            0000 (0)\n-1B424 Int File Attributes   0000 (0)\n+1B5B0 CENTRAL HEADER #11    02014B50 (33639248)\n+1B5B4 Created Zip Spec      14 (20) '2.0'\n+1B5B5 Created OS            03 (3) 'Unix'\n+1B5B6 Extract Zip Spec      0A (10) '1.0'\n+1B5B7 Extract OS            00 (0) 'MS-DOS'\n+1B5B8 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B5BA Compression Method    0000 (0) 'Stored'\n+1B5BC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B5C0 CRC                   00000000 (0)\n+1B5C4 Compressed Size       00000000 (0)\n+1B5C8 Uncompressed Size     00000000 (0)\n+1B5CC Filename Length       0015 (21)\n+1B5CE Extra Length          0000 (0)\n+1B5D0 Comment Length        0000 (0)\n+1B5D2 Disk Start            0000 (0)\n+1B5D4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B426 Ext File Attributes   41ED0010 (1106051088)\n+1B5D6 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-1B42A Local Header Offset   00000201 (513)\n-1B42E Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+1B5DA Local Header Offset   00000201 (513)\n+1B5DE Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B42E: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B5DE: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B42E: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B5DE: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B406: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B5B6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B443 CENTRAL HEADER #12    02014B50 (33639248)\n-1B447 Created Zip Spec      14 (20) '2.0'\n-1B448 Created OS            03 (3) 'Unix'\n-1B449 Extract Zip Spec      0A (10) '1.0'\n-1B44A Extract OS            00 (0) 'MS-DOS'\n-1B44B General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B44D Compression Method    0000 (0) 'Stored'\n-1B44F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B453 CRC                   00000000 (0)\n-1B457 Compressed Size       00000000 (0)\n-1B45B Uncompressed Size     00000000 (0)\n-1B45F Filename Length       001C (28)\n-1B461 Extra Length          0000 (0)\n-1B463 Comment Length        0000 (0)\n-1B465 Disk Start            0000 (0)\n-1B467 Int File Attributes   0000 (0)\n+1B5F3 CENTRAL HEADER #12    02014B50 (33639248)\n+1B5F7 Created Zip Spec      14 (20) '2.0'\n+1B5F8 Created OS            03 (3) 'Unix'\n+1B5F9 Extract Zip Spec      0A (10) '1.0'\n+1B5FA Extract OS            00 (0) 'MS-DOS'\n+1B5FB General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B5FD Compression Method    0000 (0) 'Stored'\n+1B5FF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B603 CRC                   00000000 (0)\n+1B607 Compressed Size       00000000 (0)\n+1B60B Uncompressed Size     00000000 (0)\n+1B60F Filename Length       001C (28)\n+1B611 Extra Length          0000 (0)\n+1B613 Comment Length        0000 (0)\n+1B615 Disk Start            0000 (0)\n+1B617 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B469 Ext File Attributes   41ED0010 (1106051088)\n+1B619 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-1B46D Local Header Offset   00000234 (564)\n-1B471 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B61D Local Header Offset   00000234 (564)\n+1B621 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B471: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B621: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B471: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B621: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B449: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B5F9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B48D CENTRAL HEADER #13    02014B50 (33639248)\n-1B491 Created Zip Spec      14 (20) '2.0'\n-1B492 Created OS            03 (3) 'Unix'\n-1B493 Extract Zip Spec      0A (10) '1.0'\n-1B494 Extract OS            00 (0) 'MS-DOS'\n-1B495 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B497 Compression Method    0000 (0) 'Stored'\n-1B499 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B49D CRC                   00000000 (0)\n-1B4A1 Compressed Size       00000000 (0)\n-1B4A5 Uncompressed Size     00000000 (0)\n-1B4A9 Filename Length       0020 (32)\n-1B4AB Extra Length          0000 (0)\n-1B4AD Comment Length        0000 (0)\n-1B4AF Disk Start            0000 (0)\n-1B4B1 Int File Attributes   0000 (0)\n+1B63D CENTRAL HEADER #13    02014B50 (33639248)\n+1B641 Created Zip Spec      14 (20) '2.0'\n+1B642 Created OS            03 (3) 'Unix'\n+1B643 Extract Zip Spec      0A (10) '1.0'\n+1B644 Extract OS            00 (0) 'MS-DOS'\n+1B645 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B647 Compression Method    0000 (0) 'Stored'\n+1B649 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B64D CRC                   00000000 (0)\n+1B651 Compressed Size       00000000 (0)\n+1B655 Uncompressed Size     00000000 (0)\n+1B659 Filename Length       0020 (32)\n+1B65B Extra Length          0000 (0)\n+1B65D Comment Length        0000 (0)\n+1B65F Disk Start            0000 (0)\n+1B661 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B4B3 Ext File Attributes   41ED0010 (1106051088)\n+1B663 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-1B4B7 Local Header Offset   0000026E (622)\n-1B4BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B667 Local Header Offset   0000026E (622)\n+1B66B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B4BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B66B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B4BB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B66B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B493: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B643: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B4DB CENTRAL HEADER #14    02014B50 (33639248)\n-1B4DF Created Zip Spec      14 (20) '2.0'\n-1B4E0 Created OS            03 (3) 'Unix'\n-1B4E1 Extract Zip Spec      0A (10) '1.0'\n-1B4E2 Extract OS            00 (0) 'MS-DOS'\n-1B4E3 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B4E5 Compression Method    0000 (0) 'Stored'\n-1B4E7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B4EB CRC                   00000000 (0)\n-1B4EF Compressed Size       00000000 (0)\n-1B4F3 Uncompressed Size     00000000 (0)\n-1B4F7 Filename Length       001E (30)\n-1B4F9 Extra Length          0000 (0)\n-1B4FB Comment Length        0000 (0)\n-1B4FD Disk Start            0000 (0)\n-1B4FF Int File Attributes   0000 (0)\n+1B68B CENTRAL HEADER #14    02014B50 (33639248)\n+1B68F Created Zip Spec      14 (20) '2.0'\n+1B690 Created OS            03 (3) 'Unix'\n+1B691 Extract Zip Spec      0A (10) '1.0'\n+1B692 Extract OS            00 (0) 'MS-DOS'\n+1B693 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B695 Compression Method    0000 (0) 'Stored'\n+1B697 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B69B CRC                   00000000 (0)\n+1B69F Compressed Size       00000000 (0)\n+1B6A3 Uncompressed Size     00000000 (0)\n+1B6A7 Filename Length       001E (30)\n+1B6A9 Extra Length          0000 (0)\n+1B6AB Comment Length        0000 (0)\n+1B6AD Disk Start            0000 (0)\n+1B6AF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B501 Ext File Attributes   41ED0010 (1106051088)\n+1B6B1 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-1B505 Local Header Offset   000002AC (684)\n-1B509 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B6B5 Local Header Offset   000002AC (684)\n+1B6B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B509: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B6B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B509: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B6B9: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B4E1: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B691: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B527 CENTRAL HEADER #15    02014B50 (33639248)\n-1B52B Created Zip Spec      14 (20) '2.0'\n-1B52C Created OS            03 (3) 'Unix'\n-1B52D Extract Zip Spec      0A (10) '1.0'\n-1B52E Extract OS            00 (0) 'MS-DOS'\n-1B52F General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B531 Compression Method    0000 (0) 'Stored'\n-1B533 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B537 CRC                   00000000 (0)\n-1B53B Compressed Size       00000000 (0)\n-1B53F Uncompressed Size     00000000 (0)\n-1B543 Filename Length       001E (30)\n-1B545 Extra Length          0000 (0)\n-1B547 Comment Length        0000 (0)\n-1B549 Disk Start            0000 (0)\n-1B54B Int File Attributes   0000 (0)\n+1B6D7 CENTRAL HEADER #15    02014B50 (33639248)\n+1B6DB Created Zip Spec      14 (20) '2.0'\n+1B6DC Created OS            03 (3) 'Unix'\n+1B6DD Extract Zip Spec      0A (10) '1.0'\n+1B6DE Extract OS            00 (0) 'MS-DOS'\n+1B6DF General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B6E1 Compression Method    0000 (0) 'Stored'\n+1B6E3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B6E7 CRC                   00000000 (0)\n+1B6EB Compressed Size       00000000 (0)\n+1B6EF Uncompressed Size     00000000 (0)\n+1B6F3 Filename Length       001E (30)\n+1B6F5 Extra Length          0000 (0)\n+1B6F7 Comment Length        0000 (0)\n+1B6F9 Disk Start            0000 (0)\n+1B6FB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B54D Ext File Attributes   41ED0010 (1106051088)\n+1B6FD 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-1B551 Local Header Offset   000002E8 (744)\n-1B555 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B701 Local Header Offset   000002E8 (744)\n+1B705 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B555: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B705: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B555: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B705: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B52D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B6DD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B573 CENTRAL HEADER #16    02014B50 (33639248)\n-1B577 Created Zip Spec      14 (20) '2.0'\n-1B578 Created OS            03 (3) 'Unix'\n-1B579 Extract Zip Spec      0A (10) '1.0'\n-1B57A Extract OS            00 (0) 'MS-DOS'\n-1B57B General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B57D Compression Method    0000 (0) 'Stored'\n-1B57F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B583 CRC                   00000000 (0)\n-1B587 Compressed Size       00000000 (0)\n-1B58B Uncompressed Size     00000000 (0)\n-1B58F Filename Length       0024 (36)\n-1B591 Extra Length          0000 (0)\n-1B593 Comment Length        0000 (0)\n-1B595 Disk Start            0000 (0)\n-1B597 Int File Attributes   0000 (0)\n+1B723 CENTRAL HEADER #16    02014B50 (33639248)\n+1B727 Created Zip Spec      14 (20) '2.0'\n+1B728 Created OS            03 (3) 'Unix'\n+1B729 Extract Zip Spec      0A (10) '1.0'\n+1B72A Extract OS            00 (0) 'MS-DOS'\n+1B72B General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B72D Compression Method    0000 (0) 'Stored'\n+1B72F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B733 CRC                   00000000 (0)\n+1B737 Compressed Size       00000000 (0)\n+1B73B Uncompressed Size     00000000 (0)\n+1B73F Filename Length       0024 (36)\n+1B741 Extra Length          0000 (0)\n+1B743 Comment Length        0000 (0)\n+1B745 Disk Start            0000 (0)\n+1B747 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B599 Ext File Attributes   41ED0010 (1106051088)\n+1B749 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-1B59D Local Header Offset   00000324 (804)\n-1B5A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B74D Local Header Offset   00000324 (804)\n+1B751 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B5A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B751: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B5A1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B751: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B579: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B729: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B5C5 CENTRAL HEADER #17    02014B50 (33639248)\n-1B5C9 Created Zip Spec      14 (20) '2.0'\n-1B5CA Created OS            03 (3) 'Unix'\n-1B5CB Extract Zip Spec      0A (10) '1.0'\n-1B5CC Extract OS            00 (0) 'MS-DOS'\n-1B5CD General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B5CF Compression Method    0000 (0) 'Stored'\n-1B5D1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B5D5 CRC                   00000000 (0)\n-1B5D9 Compressed Size       00000000 (0)\n-1B5DD Uncompressed Size     00000000 (0)\n-1B5E1 Filename Length       001B (27)\n-1B5E3 Extra Length          0000 (0)\n-1B5E5 Comment Length        0000 (0)\n-1B5E7 Disk Start            0000 (0)\n-1B5E9 Int File Attributes   0000 (0)\n+1B775 CENTRAL HEADER #17    02014B50 (33639248)\n+1B779 Created Zip Spec      14 (20) '2.0'\n+1B77A Created OS            03 (3) 'Unix'\n+1B77B Extract Zip Spec      0A (10) '1.0'\n+1B77C Extract OS            00 (0) 'MS-DOS'\n+1B77D General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B77F Compression Method    0000 (0) 'Stored'\n+1B781 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B785 CRC                   00000000 (0)\n+1B789 Compressed Size       00000000 (0)\n+1B78D Uncompressed Size     00000000 (0)\n+1B791 Filename Length       001B (27)\n+1B793 Extra Length          0000 (0)\n+1B795 Comment Length        0000 (0)\n+1B797 Disk Start            0000 (0)\n+1B799 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B5EB Ext File Attributes   41ED0010 (1106051088)\n+1B79B 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-1B5EF Local Header Offset   00000366 (870)\n-1B5F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B79F Local Header Offset   00000366 (870)\n+1B7A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B5F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B7A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B5F3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B7A3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B5CB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B77B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B60E CENTRAL HEADER #18    02014B50 (33639248)\n-1B612 Created Zip Spec      14 (20) '2.0'\n-1B613 Created OS            03 (3) 'Unix'\n-1B614 Extract Zip Spec      0A (10) '1.0'\n-1B615 Extract OS            00 (0) 'MS-DOS'\n-1B616 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B618 Compression Method    0000 (0) 'Stored'\n-1B61A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B61E CRC                   00000000 (0)\n-1B622 Compressed Size       00000000 (0)\n-1B626 Uncompressed Size     00000000 (0)\n-1B62A Filename Length       0025 (37)\n-1B62C Extra Length          0000 (0)\n-1B62E Comment Length        0000 (0)\n-1B630 Disk Start            0000 (0)\n-1B632 Int File Attributes   0000 (0)\n+1B7BE CENTRAL HEADER #18    02014B50 (33639248)\n+1B7C2 Created Zip Spec      14 (20) '2.0'\n+1B7C3 Created OS            03 (3) 'Unix'\n+1B7C4 Extract Zip Spec      0A (10) '1.0'\n+1B7C5 Extract OS            00 (0) 'MS-DOS'\n+1B7C6 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B7C8 Compression Method    0000 (0) 'Stored'\n+1B7CA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B7CE CRC                   00000000 (0)\n+1B7D2 Compressed Size       00000000 (0)\n+1B7D6 Uncompressed Size     00000000 (0)\n+1B7DA Filename Length       0025 (37)\n+1B7DC Extra Length          0000 (0)\n+1B7DE Comment Length        0000 (0)\n+1B7E0 Disk Start            0000 (0)\n+1B7E2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B634 Ext File Attributes   41ED0010 (1106051088)\n+1B7E4 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-1B638 Local Header Offset   0000039F (927)\n-1B63C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B7E8 Local Header Offset   0000039F (927)\n+1B7EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B63C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B7EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B63C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B7EC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B614: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B7C4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B661 CENTRAL HEADER #19    02014B50 (33639248)\n-1B665 Created Zip Spec      14 (20) '2.0'\n-1B666 Created OS            03 (3) 'Unix'\n-1B667 Extract Zip Spec      0A (10) '1.0'\n-1B668 Extract OS            00 (0) 'MS-DOS'\n-1B669 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B66B Compression Method    0000 (0) 'Stored'\n-1B66D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B671 CRC                   00000000 (0)\n-1B675 Compressed Size       00000000 (0)\n-1B679 Uncompressed Size     00000000 (0)\n-1B67D Filename Length       001F (31)\n-1B67F Extra Length          0000 (0)\n-1B681 Comment Length        0000 (0)\n-1B683 Disk Start            0000 (0)\n-1B685 Int File Attributes   0000 (0)\n+1B811 CENTRAL HEADER #19    02014B50 (33639248)\n+1B815 Created Zip Spec      14 (20) '2.0'\n+1B816 Created OS            03 (3) 'Unix'\n+1B817 Extract Zip Spec      0A (10) '1.0'\n+1B818 Extract OS            00 (0) 'MS-DOS'\n+1B819 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B81B Compression Method    0000 (0) 'Stored'\n+1B81D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B821 CRC                   00000000 (0)\n+1B825 Compressed Size       00000000 (0)\n+1B829 Uncompressed Size     00000000 (0)\n+1B82D Filename Length       001F (31)\n+1B82F Extra Length          0000 (0)\n+1B831 Comment Length        0000 (0)\n+1B833 Disk Start            0000 (0)\n+1B835 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B687 Ext File Attributes   41ED0010 (1106051088)\n+1B837 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-1B68B Local Header Offset   000003E2 (994)\n-1B68F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B83B Local Header Offset   000003E2 (994)\n+1B83F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B68F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B83F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B68F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B83F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B667: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B817: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B6AE CENTRAL HEADER #20    02014B50 (33639248)\n-1B6B2 Created Zip Spec      14 (20) '2.0'\n-1B6B3 Created OS            03 (3) 'Unix'\n-1B6B4 Extract Zip Spec      0A (10) '1.0'\n-1B6B5 Extract OS            00 (0) 'MS-DOS'\n-1B6B6 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B6B8 Compression Method    0000 (0) 'Stored'\n-1B6BA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B6BE CRC                   00000000 (0)\n-1B6C2 Compressed Size       00000000 (0)\n-1B6C6 Uncompressed Size     00000000 (0)\n-1B6CA Filename Length       0023 (35)\n-1B6CC Extra Length          0000 (0)\n-1B6CE Comment Length        0000 (0)\n-1B6D0 Disk Start            0000 (0)\n-1B6D2 Int File Attributes   0000 (0)\n+1B85E CENTRAL HEADER #20    02014B50 (33639248)\n+1B862 Created Zip Spec      14 (20) '2.0'\n+1B863 Created OS            03 (3) 'Unix'\n+1B864 Extract Zip Spec      0A (10) '1.0'\n+1B865 Extract OS            00 (0) 'MS-DOS'\n+1B866 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B868 Compression Method    0000 (0) 'Stored'\n+1B86A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B86E CRC                   00000000 (0)\n+1B872 Compressed Size       00000000 (0)\n+1B876 Uncompressed Size     00000000 (0)\n+1B87A Filename Length       0023 (35)\n+1B87C Extra Length          0000 (0)\n+1B87E Comment Length        0000 (0)\n+1B880 Disk Start            0000 (0)\n+1B882 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B6D4 Ext File Attributes   41ED0010 (1106051088)\n+1B884 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-1B6D8 Local Header Offset   0000041F (1055)\n-1B6DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B888 Local Header Offset   0000041F (1055)\n+1B88C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B6DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B88C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B6DC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B88C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B6B4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B864: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B6FF CENTRAL HEADER #21    02014B50 (33639248)\n-1B703 Created Zip Spec      14 (20) '2.0'\n-1B704 Created OS            03 (3) 'Unix'\n-1B705 Extract Zip Spec      0A (10) '1.0'\n-1B706 Extract OS            00 (0) 'MS-DOS'\n-1B707 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B709 Compression Method    0000 (0) 'Stored'\n-1B70B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B70F CRC                   00000000 (0)\n-1B713 Compressed Size       00000000 (0)\n-1B717 Uncompressed Size     00000000 (0)\n-1B71B Filename Length       001D (29)\n-1B71D Extra Length          0000 (0)\n-1B71F Comment Length        0000 (0)\n-1B721 Disk Start            0000 (0)\n-1B723 Int File Attributes   0000 (0)\n+1B8AF CENTRAL HEADER #21    02014B50 (33639248)\n+1B8B3 Created Zip Spec      14 (20) '2.0'\n+1B8B4 Created OS            03 (3) 'Unix'\n+1B8B5 Extract Zip Spec      0A (10) '1.0'\n+1B8B6 Extract OS            00 (0) 'MS-DOS'\n+1B8B7 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B8B9 Compression Method    0000 (0) 'Stored'\n+1B8BB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B8BF CRC                   00000000 (0)\n+1B8C3 Compressed Size       00000000 (0)\n+1B8C7 Uncompressed Size     00000000 (0)\n+1B8CB Filename Length       001D (29)\n+1B8CD Extra Length          0000 (0)\n+1B8CF Comment Length        0000 (0)\n+1B8D1 Disk Start            0000 (0)\n+1B8D3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B725 Ext File Attributes   41ED0010 (1106051088)\n+1B8D5 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-1B729 Local Header Offset   00000460 (1120)\n-1B72D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B8D9 Local Header Offset   00000460 (1120)\n+1B8DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B72D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B8DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B72D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B8DD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B705: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B8B5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B74A CENTRAL HEADER #22    02014B50 (33639248)\n-1B74E Created Zip Spec      14 (20) '2.0'\n-1B74F Created OS            03 (3) 'Unix'\n-1B750 Extract Zip Spec      0A (10) '1.0'\n-1B751 Extract OS            00 (0) 'MS-DOS'\n-1B752 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B754 Compression Method    0000 (0) 'Stored'\n-1B756 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B75A CRC                   00000000 (0)\n-1B75E Compressed Size       00000000 (0)\n-1B762 Uncompressed Size     00000000 (0)\n-1B766 Filename Length       000F (15)\n-1B768 Extra Length          0000 (0)\n-1B76A Comment Length        0000 (0)\n-1B76C Disk Start            0000 (0)\n-1B76E Int File Attributes   0000 (0)\n+1B8FA CENTRAL HEADER #22    02014B50 (33639248)\n+1B8FE Created Zip Spec      14 (20) '2.0'\n+1B8FF Created OS            03 (3) 'Unix'\n+1B900 Extract Zip Spec      0A (10) '1.0'\n+1B901 Extract OS            00 (0) 'MS-DOS'\n+1B902 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B904 Compression Method    0000 (0) 'Stored'\n+1B906 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B90A CRC                   00000000 (0)\n+1B90E Compressed Size       00000000 (0)\n+1B912 Uncompressed Size     00000000 (0)\n+1B916 Filename Length       000F (15)\n+1B918 Extra Length          0000 (0)\n+1B91A Comment Length        0000 (0)\n+1B91C Disk Start            0000 (0)\n+1B91E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B770 Ext File Attributes   41ED0010 (1106051088)\n+1B920 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-1B774 Local Header Offset   0000049B (1179)\n-1B778 Filename              'XXXXXXXXXXXXXXX'\n+1B924 Local Header Offset   0000049B (1179)\n+1B928 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B778: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B928: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B778: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B928: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B750: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B900: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-1B787 CENTRAL HEADER #23    02014B50 (33639248)\n-1B78B Created Zip Spec      14 (20) '2.0'\n-1B78C Created OS            03 (3) 'Unix'\n-1B78D Extract Zip Spec      0A (10) '1.0'\n-1B78E Extract OS            00 (0) 'MS-DOS'\n-1B78F General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B791 Compression Method    0000 (0) 'Stored'\n-1B793 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B797 CRC                   00000000 (0)\n-1B79B Compressed Size       00000000 (0)\n-1B79F Uncompressed Size     00000000 (0)\n-1B7A3 Filename Length       0018 (24)\n-1B7A5 Extra Length          0000 (0)\n-1B7A7 Comment Length        0000 (0)\n-1B7A9 Disk Start            0000 (0)\n-1B7AB Int File Attributes   0000 (0)\n+1B937 CENTRAL HEADER #23    02014B50 (33639248)\n+1B93B Created Zip Spec      14 (20) '2.0'\n+1B93C Created OS            03 (3) 'Unix'\n+1B93D Extract Zip Spec      0A (10) '1.0'\n+1B93E Extract OS            00 (0) 'MS-DOS'\n+1B93F General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B941 Compression Method    0000 (0) 'Stored'\n+1B943 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B947 CRC                   00000000 (0)\n+1B94B Compressed Size       00000000 (0)\n+1B94F Uncompressed Size     00000000 (0)\n+1B953 Filename Length       0018 (24)\n+1B955 Extra Length          0000 (0)\n+1B957 Comment Length        0000 (0)\n+1B959 Disk Start            0000 (0)\n+1B95B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B7AD Ext File Attributes   41ED0010 (1106051088)\n+1B95D 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-1B7B1 Local Header Offset   000004C8 (1224)\n-1B7B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+1B961 Local Header Offset   000004C8 (1224)\n+1B965 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B7B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B965: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B7B5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B965: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B78D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B93D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B7CD CENTRAL HEADER #24    02014B50 (33639248)\n-1B7D1 Created Zip Spec      14 (20) '2.0'\n-1B7D2 Created OS            03 (3) 'Unix'\n-1B7D3 Extract Zip Spec      0A (10) '1.0'\n-1B7D4 Extract OS            00 (0) 'MS-DOS'\n-1B7D5 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B7D7 Compression Method    0000 (0) 'Stored'\n-1B7D9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B7DD CRC                   00000000 (0)\n-1B7E1 Compressed Size       00000000 (0)\n-1B7E5 Uncompressed Size     00000000 (0)\n-1B7E9 Filename Length       000F (15)\n-1B7EB Extra Length          0000 (0)\n-1B7ED Comment Length        0000 (0)\n-1B7EF Disk Start            0000 (0)\n-1B7F1 Int File Attributes   0000 (0)\n+1B97D CENTRAL HEADER #24    02014B50 (33639248)\n+1B981 Created Zip Spec      14 (20) '2.0'\n+1B982 Created OS            03 (3) 'Unix'\n+1B983 Extract Zip Spec      0A (10) '1.0'\n+1B984 Extract OS            00 (0) 'MS-DOS'\n+1B985 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B987 Compression Method    0000 (0) 'Stored'\n+1B989 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B98D CRC                   00000000 (0)\n+1B991 Compressed Size       00000000 (0)\n+1B995 Uncompressed Size     00000000 (0)\n+1B999 Filename Length       000F (15)\n+1B99B Extra Length          0000 (0)\n+1B99D Comment Length        0000 (0)\n+1B99F Disk Start            0000 (0)\n+1B9A1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B7F3 Ext File Attributes   41ED0010 (1106051088)\n+1B9A3 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-1B7F7 Local Header Offset   000004FE (1278)\n-1B7FB Filename              'XXXXXXXXXXXXXXX'\n+1B9A7 Local Header Offset   000004FE (1278)\n+1B9AB Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B7FB: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B9AB: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B7FB: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B9AB: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B7D3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B983: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-1B80A CENTRAL HEADER #25    02014B50 (33639248)\n-1B80E Created Zip Spec      14 (20) '2.0'\n-1B80F Created OS            03 (3) 'Unix'\n-1B810 Extract Zip Spec      0A (10) '1.0'\n-1B811 Extract OS            00 (0) 'MS-DOS'\n-1B812 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B814 Compression Method    0000 (0) 'Stored'\n-1B816 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B81A CRC                   00000000 (0)\n-1B81E Compressed Size       00000000 (0)\n-1B822 Uncompressed Size     00000000 (0)\n-1B826 Filename Length       0020 (32)\n-1B828 Extra Length          0000 (0)\n-1B82A Comment Length        0000 (0)\n-1B82C Disk Start            0000 (0)\n-1B82E Int File Attributes   0000 (0)\n+1B9BA CENTRAL HEADER #25    02014B50 (33639248)\n+1B9BE Created Zip Spec      14 (20) '2.0'\n+1B9BF Created OS            03 (3) 'Unix'\n+1B9C0 Extract Zip Spec      0A (10) '1.0'\n+1B9C1 Extract OS            00 (0) 'MS-DOS'\n+1B9C2 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1B9C4 Compression Method    0000 (0) 'Stored'\n+1B9C6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1B9CA CRC                   00000000 (0)\n+1B9CE Compressed Size       00000000 (0)\n+1B9D2 Uncompressed Size     00000000 (0)\n+1B9D6 Filename Length       0020 (32)\n+1B9D8 Extra Length          0000 (0)\n+1B9DA Comment Length        0000 (0)\n+1B9DC Disk Start            0000 (0)\n+1B9DE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B830 Ext File Attributes   41ED0010 (1106051088)\n+1B9E0 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-1B834 Local Header Offset   0000052B (1323)\n-1B838 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1B9E4 Local Header Offset   0000052B (1323)\n+1B9E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B838: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B9E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B838: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1B9E8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B810: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B9C0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B858 CENTRAL HEADER #26    02014B50 (33639248)\n-1B85C Created Zip Spec      14 (20) '2.0'\n-1B85D Created OS            03 (3) 'Unix'\n-1B85E Extract Zip Spec      0A (10) '1.0'\n-1B85F Extract OS            00 (0) 'MS-DOS'\n-1B860 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-1B862 Compression Method    0000 (0) 'Stored'\n-1B864 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B868 CRC                   00000000 (0)\n-1B86C Compressed Size       00000000 (0)\n-1B870 Uncompressed Size     00000000 (0)\n-1B874 Filename Length       002E (46)\n-1B876 Extra Length          0000 (0)\n-1B878 Comment Length        0000 (0)\n-1B87A Disk Start            0000 (0)\n-1B87C Int File Attributes   0000 (0)\n+1BA08 CENTRAL HEADER #26    02014B50 (33639248)\n+1BA0C Created Zip Spec      14 (20) '2.0'\n+1BA0D Created OS            03 (3) 'Unix'\n+1BA0E Extract Zip Spec      0A (10) '1.0'\n+1BA0F Extract OS            00 (0) 'MS-DOS'\n+1BA10 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1BA12 Compression Method    0000 (0) 'Stored'\n+1BA14 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BA18 CRC                   00000000 (0)\n+1BA1C Compressed Size       00000000 (0)\n+1BA20 Uncompressed Size     00000000 (0)\n+1BA24 Filename Length       002E (46)\n+1BA26 Extra Length          0000 (0)\n+1BA28 Comment Length        0000 (0)\n+1BA2A Disk Start            0000 (0)\n+1BA2C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B87E Ext File Attributes   41ED0010 (1106051088)\n+1BA2E 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-1B882 Local Header Offset   00000569 (1385)\n-1B886 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BA32 Local Header Offset   00000569 (1385)\n+1BA36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B886: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BA36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x1B886: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1BA36: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x1B85E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BA0E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-1B8B4 CENTRAL HEADER #27    02014B50 (33639248)\n-1B8B8 Created Zip Spec      14 (20) '2.0'\n-1B8B9 Created OS            03 (3) 'Unix'\n-1B8BA Extract Zip Spec      14 (20) '2.0'\n-1B8BB Extract OS            00 (0) 'MS-DOS'\n-1B8BC General Purpose Flag  0800 (2048)\n+1BA64 CENTRAL HEADER #27    02014B50 (33639248)\n+1BA68 Created Zip Spec      14 (20) '2.0'\n+1BA69 Created OS            03 (3) 'Unix'\n+1BA6A Extract Zip Spec      14 (20) '2.0'\n+1BA6B Extract OS            00 (0) 'MS-DOS'\n+1BA6C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B8BE Compression Method    0008 (8) 'Deflated'\n-1B8C0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B8C4 CRC                   78DBB6D9 (2027665113)\n-1B8C8 Compressed Size       000002BE (702)\n-1B8CC Uncompressed Size     000009EA (2538)\n-1B8D0 Filename Length       0015 (21)\n-1B8D2 Extra Length          0000 (0)\n-1B8D4 Comment Length        0000 (0)\n-1B8D6 Disk Start            0000 (0)\n-1B8D8 Int File Attributes   0000 (0)\n+1BA6E Compression Method    0008 (8) 'Deflated'\n+1BA70 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BA74 CRC                   78DBB6D9 (2027665113)\n+1BA78 Compressed Size       000002BE (702)\n+1BA7C Uncompressed Size     000009EA (2538)\n+1BA80 Filename Length       0015 (21)\n+1BA82 Extra Length          0000 (0)\n+1BA84 Comment Length        0000 (0)\n+1BA86 Disk Start            0000 (0)\n+1BA88 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B8DA Ext File Attributes   81A40000 (2175008768)\n+1BA8A 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-1B8DE Local Header Offset   000005B5 (1461)\n-1B8E2 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+1BA8E Local Header Offset   000005B5 (1461)\n+1BA92 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B8E2: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BA92: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1B8F7 CENTRAL HEADER #28    02014B50 (33639248)\n-1B8FB Created Zip Spec      14 (20) '2.0'\n-1B8FC Created OS            03 (3) 'Unix'\n-1B8FD Extract Zip Spec      14 (20) '2.0'\n-1B8FE Extract OS            00 (0) 'MS-DOS'\n-1B8FF General Purpose Flag  0800 (2048)\n+1BAA7 CENTRAL HEADER #28    02014B50 (33639248)\n+1BAAB Created Zip Spec      14 (20) '2.0'\n+1BAAC Created OS            03 (3) 'Unix'\n+1BAAD Extract Zip Spec      14 (20) '2.0'\n+1BAAE Extract OS            00 (0) 'MS-DOS'\n+1BAAF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B901 Compression Method    0008 (8) 'Deflated'\n-1B903 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B907 CRC                   86E2B4B4 (2263004340)\n-1B90B Compressed Size       00000F6D (3949)\n-1B90F Uncompressed Size     00002C5E (11358)\n-1B913 Filename Length       0010 (16)\n-1B915 Extra Length          0000 (0)\n-1B917 Comment Length        0000 (0)\n-1B919 Disk Start            0000 (0)\n-1B91B Int File Attributes   0000 (0)\n+1BAB1 Compression Method    0008 (8) 'Deflated'\n+1BAB3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BAB7 CRC                   86E2B4B4 (2263004340)\n+1BABB Compressed Size       00000F6D (3949)\n+1BABF Uncompressed Size     00002C5E (11358)\n+1BAC3 Filename Length       0010 (16)\n+1BAC5 Extra Length          0000 (0)\n+1BAC7 Comment Length        0000 (0)\n+1BAC9 Disk Start            0000 (0)\n+1BACB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B91D Ext File Attributes   81A40000 (2175008768)\n+1BACD 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-1B921 Local Header Offset   000008A6 (2214)\n-1B925 Filename              'XXXXXXXXXXXXXXXX'\n+1BAD1 Local Header Offset   000008A6 (2214)\n+1BAD5 Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B925: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BAD5: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1B935 CENTRAL HEADER #29    02014B50 (33639248)\n-1B939 Created Zip Spec      14 (20) '2.0'\n-1B93A Created OS            03 (3) 'Unix'\n-1B93B Extract Zip Spec      14 (20) '2.0'\n-1B93C Extract OS            00 (0) 'MS-DOS'\n-1B93D General Purpose Flag  0800 (2048)\n+1BAE5 CENTRAL HEADER #29    02014B50 (33639248)\n+1BAE9 Created Zip Spec      14 (20) '2.0'\n+1BAEA Created OS            03 (3) 'Unix'\n+1BAEB Extract Zip Spec      14 (20) '2.0'\n+1BAEC Extract OS            00 (0) 'MS-DOS'\n+1BAED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B93F Compression Method    0008 (8) 'Deflated'\n-1B941 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B945 CRC                   4EE5121F (1323635231)\n-1B949 Compressed Size       0000007C (124)\n-1B94D Uncompressed Size     000000AA (170)\n-1B951 Filename Length       000F (15)\n-1B953 Extra Length          0000 (0)\n-1B955 Comment Length        0000 (0)\n-1B957 Disk Start            0000 (0)\n-1B959 Int File Attributes   0000 (0)\n+1BAEF Compression Method    0008 (8) 'Deflated'\n+1BAF1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BAF5 CRC                   4EE5121F (1323635231)\n+1BAF9 Compressed Size       0000007C (124)\n+1BAFD Uncompressed Size     000000AA (170)\n+1BB01 Filename Length       000F (15)\n+1BB03 Extra Length          0000 (0)\n+1BB05 Comment Length        0000 (0)\n+1BB07 Disk Start            0000 (0)\n+1BB09 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B95B Ext File Attributes   81A40000 (2175008768)\n+1BB0B 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-1B95F Local Header Offset   00001841 (6209)\n-1B963 Filename              'XXXXXXXXXXXXXXX'\n+1BB0F Local Header Offset   00001841 (6209)\n+1BB13 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B963: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BB13: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1B972 CENTRAL HEADER #30    02014B50 (33639248)\n-1B976 Created Zip Spec      14 (20) '2.0'\n-1B977 Created OS            03 (3) 'Unix'\n-1B978 Extract Zip Spec      14 (20) '2.0'\n-1B979 Extract OS            00 (0) 'MS-DOS'\n-1B97A General Purpose Flag  0800 (2048)\n+1BB22 CENTRAL HEADER #30    02014B50 (33639248)\n+1BB26 Created Zip Spec      14 (20) '2.0'\n+1BB27 Created OS            03 (3) 'Unix'\n+1BB28 Extract Zip Spec      14 (20) '2.0'\n+1BB29 Extract OS            00 (0) 'MS-DOS'\n+1BB2A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B97C Compression Method    0008 (8) 'Deflated'\n-1B97E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B982 CRC                   00900547 (9438535)\n-1B986 Compressed Size       00000219 (537)\n-1B98A Uncompressed Size     000003BF (959)\n-1B98E Filename Length       002E (46)\n-1B990 Extra Length          0000 (0)\n-1B992 Comment Length        0000 (0)\n-1B994 Disk Start            0000 (0)\n-1B996 Int File Attributes   0000 (0)\n+1BB2C Compression Method    0008 (8) 'Deflated'\n+1BB2E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BB32 CRC                   00900547 (9438535)\n+1BB36 Compressed Size       00000219 (537)\n+1BB3A Uncompressed Size     000003BF (959)\n+1BB3E Filename Length       002E (46)\n+1BB40 Extra Length          0000 (0)\n+1BB42 Comment Length        0000 (0)\n+1BB44 Disk Start            0000 (0)\n+1BB46 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B998 Ext File Attributes   81A40000 (2175008768)\n+1BB48 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-1B99C Local Header Offset   000018EA (6378)\n-1B9A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BB4C Local Header Offset   000018EA (6378)\n+1BB50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B9A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BB50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1B9CE CENTRAL HEADER #31    02014B50 (33639248)\n-1B9D2 Created Zip Spec      14 (20) '2.0'\n-1B9D3 Created OS            03 (3) 'Unix'\n-1B9D4 Extract Zip Spec      14 (20) '2.0'\n-1B9D5 Extract OS            00 (0) 'MS-DOS'\n-1B9D6 General Purpose Flag  0800 (2048)\n+1BB7E CENTRAL HEADER #31    02014B50 (33639248)\n+1BB82 Created Zip Spec      14 (20) '2.0'\n+1BB83 Created OS            03 (3) 'Unix'\n+1BB84 Extract Zip Spec      14 (20) '2.0'\n+1BB85 Extract OS            00 (0) 'MS-DOS'\n+1BB86 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B9D8 Compression Method    0008 (8) 'Deflated'\n-1B9DA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1B9DE CRC                   C50B0632 (3305834034)\n-1B9E2 Compressed Size       00000313 (787)\n-1B9E6 Uncompressed Size     000007AE (1966)\n-1B9EA Filename Length       0033 (51)\n-1B9EC Extra Length          0000 (0)\n-1B9EE Comment Length        0000 (0)\n-1B9F0 Disk Start            0000 (0)\n-1B9F2 Int File Attributes   0000 (0)\n+1BB88 Compression Method    0008 (8) 'Deflated'\n+1BB8A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BB8E CRC                   1D274B23 (489114403)\n+1BB92 Compressed Size       0000031B (795)\n+1BB96 Uncompressed Size     000007EC (2028)\n+1BB9A Filename Length       0033 (51)\n+1BB9C Extra Length          0000 (0)\n+1BB9E Comment Length        0000 (0)\n+1BBA0 Disk Start            0000 (0)\n+1BBA2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1B9F4 Ext File Attributes   81A40000 (2175008768)\n+1BBA4 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-1B9F8 Local Header Offset   00001B4F (6991)\n-1B9FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BBA8 Local Header Offset   00001B4F (6991)\n+1BBAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B9FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BBAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BA2F CENTRAL HEADER #32    02014B50 (33639248)\n-1BA33 Created Zip Spec      14 (20) '2.0'\n-1BA34 Created OS            03 (3) 'Unix'\n-1BA35 Extract Zip Spec      14 (20) '2.0'\n-1BA36 Extract OS            00 (0) 'MS-DOS'\n-1BA37 General Purpose Flag  0800 (2048)\n+1BBDF CENTRAL HEADER #32    02014B50 (33639248)\n+1BBE3 Created Zip Spec      14 (20) '2.0'\n+1BBE4 Created OS            03 (3) 'Unix'\n+1BBE5 Extract Zip Spec      14 (20) '2.0'\n+1BBE6 Extract OS            00 (0) 'MS-DOS'\n+1BBE7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BA39 Compression Method    0008 (8) 'Deflated'\n-1BA3B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BA3F CRC                   C514DA82 (3306478210)\n-1BA43 Compressed Size       00000265 (613)\n-1BA47 Uncompressed Size     00000465 (1125)\n-1BA4B Filename Length       0031 (49)\n-1BA4D Extra Length          0000 (0)\n-1BA4F Comment Length        0000 (0)\n-1BA51 Disk Start            0000 (0)\n-1BA53 Int File Attributes   0000 (0)\n+1BBE9 Compression Method    0008 (8) 'Deflated'\n+1BBEB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BBEF CRC                   C514DA82 (3306478210)\n+1BBF3 Compressed Size       00000265 (613)\n+1BBF7 Uncompressed Size     00000465 (1125)\n+1BBFB Filename Length       0031 (49)\n+1BBFD Extra Length          0000 (0)\n+1BBFF Comment Length        0000 (0)\n+1BC01 Disk Start            0000 (0)\n+1BC03 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BA55 Ext File Attributes   81A40000 (2175008768)\n+1BC05 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-1BA59 Local Header Offset   00001EB3 (7859)\n-1BA5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BC09 Local Header Offset   00001EBB (7867)\n+1BC0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BA5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BC0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BA8E CENTRAL HEADER #33    02014B50 (33639248)\n-1BA92 Created Zip Spec      14 (20) '2.0'\n-1BA93 Created OS            03 (3) 'Unix'\n-1BA94 Extract Zip Spec      14 (20) '2.0'\n-1BA95 Extract OS            00 (0) 'MS-DOS'\n-1BA96 General Purpose Flag  0800 (2048)\n+1BC3E CENTRAL HEADER #33    02014B50 (33639248)\n+1BC42 Created Zip Spec      14 (20) '2.0'\n+1BC43 Created OS            03 (3) 'Unix'\n+1BC44 Extract Zip Spec      14 (20) '2.0'\n+1BC45 Extract OS            00 (0) 'MS-DOS'\n+1BC46 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BA98 Compression Method    0008 (8) 'Deflated'\n-1BA9A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BA9E CRC                   3836550F (943084815)\n-1BAA2 Compressed Size       00000848 (2120)\n-1BAA6 Uncompressed Size     00001E84 (7812)\n-1BAAA Filename Length       0025 (37)\n-1BAAC Extra Length          0000 (0)\n-1BAAE Comment Length        0000 (0)\n-1BAB0 Disk Start            0000 (0)\n-1BAB2 Int File Attributes   0000 (0)\n+1BC48 Compression Method    0008 (8) 'Deflated'\n+1BC4A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BC4E CRC                   58855C59 (1485134937)\n+1BC52 Compressed Size       00000858 (2136)\n+1BC56 Uncompressed Size     00001F83 (8067)\n+1BC5A Filename Length       0025 (37)\n+1BC5C Extra Length          0000 (0)\n+1BC5E Comment Length        0000 (0)\n+1BC60 Disk Start            0000 (0)\n+1BC62 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BAB4 Ext File Attributes   81A40000 (2175008768)\n+1BC64 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-1BAB8 Local Header Offset   00002167 (8551)\n-1BABC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BC68 Local Header Offset   0000216F (8559)\n+1BC6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BABC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BC6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BAE1 CENTRAL HEADER #34    02014B50 (33639248)\n-1BAE5 Created Zip Spec      14 (20) '2.0'\n-1BAE6 Created OS            03 (3) 'Unix'\n-1BAE7 Extract Zip Spec      14 (20) '2.0'\n-1BAE8 Extract OS            00 (0) 'MS-DOS'\n-1BAE9 General Purpose Flag  0800 (2048)\n+1BC91 CENTRAL HEADER #34    02014B50 (33639248)\n+1BC95 Created Zip Spec      14 (20) '2.0'\n+1BC96 Created OS            03 (3) 'Unix'\n+1BC97 Extract Zip Spec      14 (20) '2.0'\n+1BC98 Extract OS            00 (0) 'MS-DOS'\n+1BC99 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BAEB Compression Method    0008 (8) 'Deflated'\n-1BAED Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BAF1 CRC                   16C36050 (381902928)\n-1BAF5 Compressed Size       00000443 (1091)\n-1BAF9 Uncompressed Size     00000A30 (2608)\n-1BAFD Filename Length       0026 (38)\n-1BAFF Extra Length          0000 (0)\n-1BB01 Comment Length        0000 (0)\n-1BB03 Disk Start            0000 (0)\n-1BB05 Int File Attributes   0000 (0)\n+1BC9B Compression Method    0008 (8) 'Deflated'\n+1BC9D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BCA1 CRC                   16C36050 (381902928)\n+1BCA5 Compressed Size       00000443 (1091)\n+1BCA9 Uncompressed Size     00000A30 (2608)\n+1BCAD Filename Length       0026 (38)\n+1BCAF Extra Length          0000 (0)\n+1BCB1 Comment Length        0000 (0)\n+1BCB3 Disk Start            0000 (0)\n+1BCB5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BB07 Ext File Attributes   81A40000 (2175008768)\n+1BCB7 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-1BB0B Local Header Offset   000029F2 (10738)\n-1BB0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BCBB Local Header Offset   00002A0A (10762)\n+1BCBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BB0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BCBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BB35 CENTRAL HEADER #35    02014B50 (33639248)\n-1BB39 Created Zip Spec      14 (20) '2.0'\n-1BB3A Created OS            03 (3) 'Unix'\n-1BB3B Extract Zip Spec      14 (20) '2.0'\n-1BB3C Extract OS            00 (0) 'MS-DOS'\n-1BB3D General Purpose Flag  0800 (2048)\n+1BCE5 CENTRAL HEADER #35    02014B50 (33639248)\n+1BCE9 Created Zip Spec      14 (20) '2.0'\n+1BCEA Created OS            03 (3) 'Unix'\n+1BCEB Extract Zip Spec      14 (20) '2.0'\n+1BCEC Extract OS            00 (0) 'MS-DOS'\n+1BCED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BB3F Compression Method    0008 (8) 'Deflated'\n-1BB41 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BB45 CRC                   5C1C5F40 (1545363264)\n-1BB49 Compressed Size       00000402 (1026)\n-1BB4D Uncompressed Size     00000A28 (2600)\n-1BB51 Filename Length       002A (42)\n-1BB53 Extra Length          0000 (0)\n-1BB55 Comment Length        0000 (0)\n-1BB57 Disk Start            0000 (0)\n-1BB59 Int File Attributes   0000 (0)\n+1BCEF Compression Method    0008 (8) 'Deflated'\n+1BCF1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BCF5 CRC                   28FBE016 (687595542)\n+1BCF9 Compressed Size       0000040C (1036)\n+1BCFD Uncompressed Size     00000A76 (2678)\n+1BD01 Filename Length       002A (42)\n+1BD03 Extra Length          0000 (0)\n+1BD05 Comment Length        0000 (0)\n+1BD07 Disk Start            0000 (0)\n+1BD09 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BB5B Ext File Attributes   81A40000 (2175008768)\n+1BD0B 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-1BB5F Local Header Offset   00002E79 (11897)\n-1BB63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BD0F Local Header Offset   00002E91 (11921)\n+1BD13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BB63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BD13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BB8D CENTRAL HEADER #36    02014B50 (33639248)\n-1BB91 Created Zip Spec      14 (20) '2.0'\n-1BB92 Created OS            03 (3) 'Unix'\n-1BB93 Extract Zip Spec      14 (20) '2.0'\n-1BB94 Extract OS            00 (0) 'MS-DOS'\n-1BB95 General Purpose Flag  0800 (2048)\n+1BD3D CENTRAL HEADER #36    02014B50 (33639248)\n+1BD41 Created Zip Spec      14 (20) '2.0'\n+1BD42 Created OS            03 (3) 'Unix'\n+1BD43 Extract Zip Spec      14 (20) '2.0'\n+1BD44 Extract OS            00 (0) 'MS-DOS'\n+1BD45 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BB97 Compression Method    0008 (8) 'Deflated'\n-1BB99 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BB9D CRC                   93FCD4E8 (2482820328)\n-1BBA1 Compressed Size       00000BD6 (3030)\n-1BBA5 Uncompressed Size     00003024 (12324)\n-1BBA9 Filename Length       0028 (40)\n-1BBAB Extra Length          0000 (0)\n-1BBAD Comment Length        0000 (0)\n-1BBAF Disk Start            0000 (0)\n-1BBB1 Int File Attributes   0000 (0)\n+1BD47 Compression Method    0008 (8) 'Deflated'\n+1BD49 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BD4D CRC                   18D15EB0 (416374448)\n+1BD51 Compressed Size       00000BEA (3050)\n+1BD55 Uncompressed Size     00003175 (12661)\n+1BD59 Filename Length       0028 (40)\n+1BD5B Extra Length          0000 (0)\n+1BD5D Comment Length        0000 (0)\n+1BD5F Disk Start            0000 (0)\n+1BD61 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BBB3 Ext File Attributes   81A40000 (2175008768)\n+1BD63 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-1BBB7 Local Header Offset   000032C3 (12995)\n-1BBBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BD67 Local Header Offset   000032E5 (13029)\n+1BD6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BBBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BD6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BBE3 CENTRAL HEADER #37    02014B50 (33639248)\n-1BBE7 Created Zip Spec      14 (20) '2.0'\n-1BBE8 Created OS            03 (3) 'Unix'\n-1BBE9 Extract Zip Spec      14 (20) '2.0'\n-1BBEA Extract OS            00 (0) 'MS-DOS'\n-1BBEB General Purpose Flag  0800 (2048)\n+1BD93 CENTRAL HEADER #37    02014B50 (33639248)\n+1BD97 Created Zip Spec      14 (20) '2.0'\n+1BD98 Created OS            03 (3) 'Unix'\n+1BD99 Extract Zip Spec      14 (20) '2.0'\n+1BD9A Extract OS            00 (0) 'MS-DOS'\n+1BD9B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BBED Compression Method    0008 (8) 'Deflated'\n-1BBEF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BBF3 CRC                   735FA0B6 (1935646902)\n-1BBF7 Compressed Size       000003B0 (944)\n-1BBFB Uncompressed Size     00000968 (2408)\n-1BBFF Filename Length       002C (44)\n-1BC01 Extra Length          0000 (0)\n-1BC03 Comment Length        0000 (0)\n-1BC05 Disk Start            0000 (0)\n-1BC07 Int File Attributes   0000 (0)\n+1BD9D Compression Method    0008 (8) 'Deflated'\n+1BD9F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BDA3 CRC                   C1E775CF (3253171663)\n+1BDA7 Compressed Size       000003B9 (953)\n+1BDAB Uncompressed Size     000009AF (2479)\n+1BDAF Filename Length       002C (44)\n+1BDB1 Extra Length          0000 (0)\n+1BDB3 Comment Length        0000 (0)\n+1BDB5 Disk Start            0000 (0)\n+1BDB7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BC09 Ext File Attributes   81A40000 (2175008768)\n+1BDB9 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-1BC0D Local Header Offset   00003EDF (16095)\n-1BC11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BDBD Local Header Offset   00003F15 (16149)\n+1BDC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BC11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BDC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BC3D CENTRAL HEADER #38    02014B50 (33639248)\n-1BC41 Created Zip Spec      14 (20) '2.0'\n-1BC42 Created OS            03 (3) 'Unix'\n-1BC43 Extract Zip Spec      14 (20) '2.0'\n-1BC44 Extract OS            00 (0) 'MS-DOS'\n-1BC45 General Purpose Flag  0800 (2048)\n+1BDED CENTRAL HEADER #38    02014B50 (33639248)\n+1BDF1 Created Zip Spec      14 (20) '2.0'\n+1BDF2 Created OS            03 (3) 'Unix'\n+1BDF3 Extract Zip Spec      14 (20) '2.0'\n+1BDF4 Extract OS            00 (0) 'MS-DOS'\n+1BDF5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BC47 Compression Method    0008 (8) 'Deflated'\n-1BC49 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BC4D CRC                   2AE2442E (719471662)\n-1BC51 Compressed Size       00000471 (1137)\n-1BC55 Uncompressed Size     00000A18 (2584)\n-1BC59 Filename Length       0023 (35)\n-1BC5B Extra Length          0000 (0)\n-1BC5D Comment Length        0000 (0)\n-1BC5F Disk Start            0000 (0)\n-1BC61 Int File Attributes   0000 (0)\n+1BDF7 Compression Method    0008 (8) 'Deflated'\n+1BDF9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BDFD CRC                   7E97C5F2 (2123875826)\n+1BE01 Compressed Size       0000047B (1147)\n+1BE05 Uncompressed Size     00000A79 (2681)\n+1BE09 Filename Length       0023 (35)\n+1BE0B Extra Length          0000 (0)\n+1BE0D Comment Length        0000 (0)\n+1BE0F Disk Start            0000 (0)\n+1BE11 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BC63 Ext File Attributes   81A40000 (2175008768)\n+1BE13 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-1BC67 Local Header Offset   000042D9 (17113)\n-1BC6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BE17 Local Header Offset   00004318 (17176)\n+1BE1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BC6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BE1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BC8E CENTRAL HEADER #39    02014B50 (33639248)\n-1BC92 Created Zip Spec      14 (20) '2.0'\n-1BC93 Created OS            03 (3) 'Unix'\n-1BC94 Extract Zip Spec      14 (20) '2.0'\n-1BC95 Extract OS            00 (0) 'MS-DOS'\n-1BC96 General Purpose Flag  0800 (2048)\n+1BE3E CENTRAL HEADER #39    02014B50 (33639248)\n+1BE42 Created Zip Spec      14 (20) '2.0'\n+1BE43 Created OS            03 (3) 'Unix'\n+1BE44 Extract Zip Spec      14 (20) '2.0'\n+1BE45 Extract OS            00 (0) 'MS-DOS'\n+1BE46 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BC98 Compression Method    0008 (8) 'Deflated'\n-1BC9A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BC9E CRC                   525AF459 (1381692505)\n-1BCA2 Compressed Size       00000299 (665)\n-1BCA6 Uncompressed Size     0000053F (1343)\n-1BCAA Filename Length       0022 (34)\n-1BCAC Extra Length          0000 (0)\n-1BCAE Comment Length        0000 (0)\n-1BCB0 Disk Start            0000 (0)\n-1BCB2 Int File Attributes   0000 (0)\n+1BE48 Compression Method    0008 (8) 'Deflated'\n+1BE4A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BE4E CRC                   525AF459 (1381692505)\n+1BE52 Compressed Size       00000299 (665)\n+1BE56 Uncompressed Size     0000053F (1343)\n+1BE5A Filename Length       0022 (34)\n+1BE5C Extra Length          0000 (0)\n+1BE5E Comment Length        0000 (0)\n+1BE60 Disk Start            0000 (0)\n+1BE62 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BCB4 Ext File Attributes   81A40000 (2175008768)\n+1BE64 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-1BCB8 Local Header Offset   0000478B (18315)\n-1BCBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BE68 Local Header Offset   000047D4 (18388)\n+1BE6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BCBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BE6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BCDE CENTRAL HEADER #40    02014B50 (33639248)\n-1BCE2 Created Zip Spec      14 (20) '2.0'\n-1BCE3 Created OS            03 (3) 'Unix'\n-1BCE4 Extract Zip Spec      14 (20) '2.0'\n-1BCE5 Extract OS            00 (0) 'MS-DOS'\n-1BCE6 General Purpose Flag  0800 (2048)\n+1BE8E CENTRAL HEADER #40    02014B50 (33639248)\n+1BE92 Created Zip Spec      14 (20) '2.0'\n+1BE93 Created OS            03 (3) 'Unix'\n+1BE94 Extract Zip Spec      14 (20) '2.0'\n+1BE95 Extract OS            00 (0) 'MS-DOS'\n+1BE96 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BCE8 Compression Method    0008 (8) 'Deflated'\n-1BCEA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BCEE CRC                   FC32E707 (4231194375)\n-1BCF2 Compressed Size       0000029D (669)\n-1BCF6 Uncompressed Size     000005AC (1452)\n-1BCFA Filename Length       002A (42)\n-1BCFC Extra Length          0000 (0)\n-1BCFE Comment Length        0000 (0)\n-1BD00 Disk Start            0000 (0)\n-1BD02 Int File Attributes   0000 (0)\n+1BE98 Compression Method    0008 (8) 'Deflated'\n+1BE9A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BE9E CRC                   FC32E707 (4231194375)\n+1BEA2 Compressed Size       0000029D (669)\n+1BEA6 Uncompressed Size     000005AC (1452)\n+1BEAA Filename Length       002A (42)\n+1BEAC Extra Length          0000 (0)\n+1BEAE Comment Length        0000 (0)\n+1BEB0 Disk Start            0000 (0)\n+1BEB2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BD04 Ext File Attributes   81A40000 (2175008768)\n+1BEB4 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-1BD08 Local Header Offset   00004A64 (19044)\n-1BD0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BEB8 Local Header Offset   00004AAD (19117)\n+1BEBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BD0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BEBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BD36 CENTRAL HEADER #41    02014B50 (33639248)\n-1BD3A Created Zip Spec      14 (20) '2.0'\n-1BD3B Created OS            03 (3) 'Unix'\n-1BD3C Extract Zip Spec      14 (20) '2.0'\n-1BD3D Extract OS            00 (0) 'MS-DOS'\n-1BD3E General Purpose Flag  0800 (2048)\n+1BEE6 CENTRAL HEADER #41    02014B50 (33639248)\n+1BEEA Created Zip Spec      14 (20) '2.0'\n+1BEEB Created OS            03 (3) 'Unix'\n+1BEEC Extract Zip Spec      14 (20) '2.0'\n+1BEED Extract OS            00 (0) 'MS-DOS'\n+1BEEE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BD40 Compression Method    0008 (8) 'Deflated'\n-1BD42 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BD46 CRC                   2EDA0DE9 (786042345)\n-1BD4A Compressed Size       0000043E (1086)\n-1BD4E Uncompressed Size     00000965 (2405)\n-1BD52 Filename Length       0020 (32)\n-1BD54 Extra Length          0000 (0)\n-1BD56 Comment Length        0000 (0)\n-1BD58 Disk Start            0000 (0)\n-1BD5A Int File Attributes   0000 (0)\n+1BEF0 Compression Method    0008 (8) 'Deflated'\n+1BEF2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BEF6 CRC                   2EDA0DE9 (786042345)\n+1BEFA Compressed Size       0000043E (1086)\n+1BEFE Uncompressed Size     00000965 (2405)\n+1BF02 Filename Length       0020 (32)\n+1BF04 Extra Length          0000 (0)\n+1BF06 Comment Length        0000 (0)\n+1BF08 Disk Start            0000 (0)\n+1BF0A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BD5C Ext File Attributes   81A40000 (2175008768)\n+1BF0C 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-1BD60 Local Header Offset   00004D49 (19785)\n-1BD64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BF10 Local Header Offset   00004D92 (19858)\n+1BF14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BD64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BF14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BD84 CENTRAL HEADER #42    02014B50 (33639248)\n-1BD88 Created Zip Spec      14 (20) '2.0'\n-1BD89 Created OS            03 (3) 'Unix'\n-1BD8A Extract Zip Spec      14 (20) '2.0'\n-1BD8B Extract OS            00 (0) 'MS-DOS'\n-1BD8C General Purpose Flag  0800 (2048)\n+1BF34 CENTRAL HEADER #42    02014B50 (33639248)\n+1BF38 Created Zip Spec      14 (20) '2.0'\n+1BF39 Created OS            03 (3) 'Unix'\n+1BF3A Extract Zip Spec      14 (20) '2.0'\n+1BF3B Extract OS            00 (0) 'MS-DOS'\n+1BF3C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BD8E Compression Method    0008 (8) 'Deflated'\n-1BD90 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BD94 CRC                   16263A19 (371603993)\n-1BD98 Compressed Size       0000057C (1404)\n-1BD9C Uncompressed Size     00000F7D (3965)\n-1BDA0 Filename Length       0027 (39)\n-1BDA2 Extra Length          0000 (0)\n-1BDA4 Comment Length        0000 (0)\n-1BDA6 Disk Start            0000 (0)\n-1BDA8 Int File Attributes   0000 (0)\n+1BF3E Compression Method    0008 (8) 'Deflated'\n+1BF40 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BF44 CRC                   F67FCDE8 (4135570920)\n+1BF48 Compressed Size       00000589 (1417)\n+1BF4C Uncompressed Size     00000FE9 (4073)\n+1BF50 Filename Length       0027 (39)\n+1BF52 Extra Length          0000 (0)\n+1BF54 Comment Length        0000 (0)\n+1BF56 Disk Start            0000 (0)\n+1BF58 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BDAA Ext File Attributes   81A40000 (2175008768)\n+1BF5A 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-1BDAE Local Header Offset   000051C5 (20933)\n-1BDB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BF5E Local Header Offset   0000520E (21006)\n+1BF62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BDB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BF62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BDD9 CENTRAL HEADER #43    02014B50 (33639248)\n-1BDDD Created Zip Spec      14 (20) '2.0'\n-1BDDE Created OS            03 (3) 'Unix'\n-1BDDF Extract Zip Spec      14 (20) '2.0'\n-1BDE0 Extract OS            00 (0) 'MS-DOS'\n-1BDE1 General Purpose Flag  0800 (2048)\n+1BF89 CENTRAL HEADER #43    02014B50 (33639248)\n+1BF8D Created Zip Spec      14 (20) '2.0'\n+1BF8E Created OS            03 (3) 'Unix'\n+1BF8F Extract Zip Spec      14 (20) '2.0'\n+1BF90 Extract OS            00 (0) 'MS-DOS'\n+1BF91 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BDE3 Compression Method    0008 (8) 'Deflated'\n-1BDE5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BDE9 CRC                   4A170C4C (1243024460)\n-1BDED Compressed Size       00000467 (1127)\n-1BDF1 Uncompressed Size     00000EA1 (3745)\n-1BDF5 Filename Length       0024 (36)\n-1BDF7 Extra Length          0000 (0)\n-1BDF9 Comment Length        0000 (0)\n-1BDFB Disk Start            0000 (0)\n-1BDFD Int File Attributes   0000 (0)\n+1BF93 Compression Method    0008 (8) 'Deflated'\n+1BF95 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BF99 CRC                   E5052367 (3842319207)\n+1BF9D Compressed Size       00000472 (1138)\n+1BFA1 Uncompressed Size     00000F2D (3885)\n+1BFA5 Filename Length       0024 (36)\n+1BFA7 Extra Length          0000 (0)\n+1BFA9 Comment Length        0000 (0)\n+1BFAB Disk Start            0000 (0)\n+1BFAD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BDFF Ext File Attributes   81A40000 (2175008768)\n+1BFAF 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-1BE03 Local Header Offset   00005786 (22406)\n-1BE07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1BFB3 Local Header Offset   000057DC (22492)\n+1BFB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BE07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BFB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BE2B CENTRAL HEADER #44    02014B50 (33639248)\n-1BE2F Created Zip Spec      14 (20) '2.0'\n-1BE30 Created OS            03 (3) 'Unix'\n-1BE31 Extract Zip Spec      14 (20) '2.0'\n-1BE32 Extract OS            00 (0) 'MS-DOS'\n-1BE33 General Purpose Flag  0800 (2048)\n+1BFDB CENTRAL HEADER #44    02014B50 (33639248)\n+1BFDF Created Zip Spec      14 (20) '2.0'\n+1BFE0 Created OS            03 (3) 'Unix'\n+1BFE1 Extract Zip Spec      14 (20) '2.0'\n+1BFE2 Extract OS            00 (0) 'MS-DOS'\n+1BFE3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BE35 Compression Method    0008 (8) 'Deflated'\n-1BE37 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BE3B CRC                   D1AB43CA (3517662154)\n-1BE3F Compressed Size       00000200 (512)\n-1BE43 Uncompressed Size     00000377 (887)\n-1BE47 Filename Length       0024 (36)\n-1BE49 Extra Length          0000 (0)\n-1BE4B Comment Length        0000 (0)\n-1BE4D Disk Start            0000 (0)\n-1BE4F Int File Attributes   0000 (0)\n+1BFE5 Compression Method    0008 (8) 'Deflated'\n+1BFE7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1BFEB CRC                   1A821C29 (444734505)\n+1BFEF Compressed Size       00000207 (519)\n+1BFF3 Uncompressed Size     0000038E (910)\n+1BFF7 Filename Length       0024 (36)\n+1BFF9 Extra Length          0000 (0)\n+1BFFB Comment Length        0000 (0)\n+1BFFD Disk Start            0000 (0)\n+1BFFF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BE51 Ext File Attributes   81A40000 (2175008768)\n+1C001 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-1BE55 Local Header Offset   00005C2F (23599)\n-1BE59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C005 Local Header Offset   00005C90 (23696)\n+1C009 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BE59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C009: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BE7D CENTRAL HEADER #45    02014B50 (33639248)\n-1BE81 Created Zip Spec      14 (20) '2.0'\n-1BE82 Created OS            03 (3) 'Unix'\n-1BE83 Extract Zip Spec      14 (20) '2.0'\n-1BE84 Extract OS            00 (0) 'MS-DOS'\n-1BE85 General Purpose Flag  0800 (2048)\n+1C02D CENTRAL HEADER #45    02014B50 (33639248)\n+1C031 Created Zip Spec      14 (20) '2.0'\n+1C032 Created OS            03 (3) 'Unix'\n+1C033 Extract Zip Spec      14 (20) '2.0'\n+1C034 Extract OS            00 (0) 'MS-DOS'\n+1C035 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BE87 Compression Method    0008 (8) 'Deflated'\n-1BE89 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BE8D CRC                   19B4DE27 (431283751)\n-1BE91 Compressed Size       000002C5 (709)\n-1BE95 Uncompressed Size     000005D1 (1489)\n-1BE99 Filename Length       0021 (33)\n-1BE9B Extra Length          0000 (0)\n-1BE9D Comment Length        0000 (0)\n-1BE9F Disk Start            0000 (0)\n-1BEA1 Int File Attributes   0000 (0)\n+1C037 Compression Method    0008 (8) 'Deflated'\n+1C039 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C03D CRC                   19B4DE27 (431283751)\n+1C041 Compressed Size       000002C5 (709)\n+1C045 Uncompressed Size     000005D1 (1489)\n+1C049 Filename Length       0021 (33)\n+1C04B Extra Length          0000 (0)\n+1C04D Comment Length        0000 (0)\n+1C04F Disk Start            0000 (0)\n+1C051 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BEA3 Ext File Attributes   81A40000 (2175008768)\n+1C053 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-1BEA7 Local Header Offset   00005E71 (24177)\n-1BEAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C057 Local Header Offset   00005ED9 (24281)\n+1C05B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BEAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C05B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BECC CENTRAL HEADER #46    02014B50 (33639248)\n-1BED0 Created Zip Spec      14 (20) '2.0'\n-1BED1 Created OS            03 (3) 'Unix'\n-1BED2 Extract Zip Spec      14 (20) '2.0'\n-1BED3 Extract OS            00 (0) 'MS-DOS'\n-1BED4 General Purpose Flag  0800 (2048)\n+1C07C CENTRAL HEADER #46    02014B50 (33639248)\n+1C080 Created Zip Spec      14 (20) '2.0'\n+1C081 Created OS            03 (3) 'Unix'\n+1C082 Extract Zip Spec      14 (20) '2.0'\n+1C083 Extract OS            00 (0) 'MS-DOS'\n+1C084 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BED6 Compression Method    0008 (8) 'Deflated'\n-1BED8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BEDC CRC                   D82F1E47 (3626966599)\n-1BEE0 Compressed Size       000002AB (683)\n-1BEE4 Uncompressed Size     0000059A (1434)\n-1BEE8 Filename Length       0029 (41)\n-1BEEA Extra Length          0000 (0)\n-1BEEC Comment Length        0000 (0)\n-1BEEE Disk Start            0000 (0)\n-1BEF0 Int File Attributes   0000 (0)\n+1C086 Compression Method    0008 (8) 'Deflated'\n+1C088 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C08C CRC                   D82F1E47 (3626966599)\n+1C090 Compressed Size       000002AB (683)\n+1C094 Uncompressed Size     0000059A (1434)\n+1C098 Filename Length       0029 (41)\n+1C09A Extra Length          0000 (0)\n+1C09C Comment Length        0000 (0)\n+1C09E Disk Start            0000 (0)\n+1C0A0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BEF2 Ext File Attributes   81A40000 (2175008768)\n+1C0A2 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-1BEF6 Local Header Offset   00006175 (24949)\n-1BEFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C0A6 Local Header Offset   000061DD (25053)\n+1C0AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BEFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C0AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BF23 CENTRAL HEADER #47    02014B50 (33639248)\n-1BF27 Created Zip Spec      14 (20) '2.0'\n-1BF28 Created OS            03 (3) 'Unix'\n-1BF29 Extract Zip Spec      14 (20) '2.0'\n-1BF2A Extract OS            00 (0) 'MS-DOS'\n-1BF2B General Purpose Flag  0800 (2048)\n+1C0D3 CENTRAL HEADER #47    02014B50 (33639248)\n+1C0D7 Created Zip Spec      14 (20) '2.0'\n+1C0D8 Created OS            03 (3) 'Unix'\n+1C0D9 Extract Zip Spec      14 (20) '2.0'\n+1C0DA Extract OS            00 (0) 'MS-DOS'\n+1C0DB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BF2D Compression Method    0008 (8) 'Deflated'\n-1BF2F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BF33 CRC                   2BFDB64A (738047562)\n-1BF37 Compressed Size       0000036F (879)\n-1BF3B Uncompressed Size     000007D0 (2000)\n-1BF3F Filename Length       002A (42)\n-1BF41 Extra Length          0000 (0)\n-1BF43 Comment Length        0000 (0)\n-1BF45 Disk Start            0000 (0)\n-1BF47 Int File Attributes   0000 (0)\n+1C0DD Compression Method    0008 (8) 'Deflated'\n+1C0DF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C0E3 CRC                   16B7BD77 (381140343)\n+1C0E7 Compressed Size       0000037A (890)\n+1C0EB Uncompressed Size     00000805 (2053)\n+1C0EF Filename Length       002A (42)\n+1C0F1 Extra Length          0000 (0)\n+1C0F3 Comment Length        0000 (0)\n+1C0F5 Disk Start            0000 (0)\n+1C0F7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BF49 Ext File Attributes   81A40000 (2175008768)\n+1C0F9 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-1BF4D Local Header Offset   00006467 (25703)\n-1BF51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C0FD Local Header Offset   000064CF (25807)\n+1C101 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BF51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C101: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BF7B CENTRAL HEADER #48    02014B50 (33639248)\n-1BF7F Created Zip Spec      14 (20) '2.0'\n-1BF80 Created OS            03 (3) 'Unix'\n-1BF81 Extract Zip Spec      14 (20) '2.0'\n-1BF82 Extract OS            00 (0) 'MS-DOS'\n-1BF83 General Purpose Flag  0800 (2048)\n+1C12B CENTRAL HEADER #48    02014B50 (33639248)\n+1C12F Created Zip Spec      14 (20) '2.0'\n+1C130 Created OS            03 (3) 'Unix'\n+1C131 Extract Zip Spec      14 (20) '2.0'\n+1C132 Extract OS            00 (0) 'MS-DOS'\n+1C133 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BF85 Compression Method    0008 (8) 'Deflated'\n-1BF87 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BF8B CRC                   CCB43BAA (3434363818)\n-1BF8F Compressed Size       000005D0 (1488)\n-1BF93 Uncompressed Size     00000DF0 (3568)\n-1BF97 Filename Length       0022 (34)\n-1BF99 Extra Length          0000 (0)\n-1BF9B Comment Length        0000 (0)\n-1BF9D Disk Start            0000 (0)\n-1BF9F Int File Attributes   0000 (0)\n+1C135 Compression Method    0008 (8) 'Deflated'\n+1C137 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C13B CRC                   CCB43BAA (3434363818)\n+1C13F Compressed Size       000005D0 (1488)\n+1C143 Uncompressed Size     00000DF0 (3568)\n+1C147 Filename Length       0022 (34)\n+1C149 Extra Length          0000 (0)\n+1C14B Comment Length        0000 (0)\n+1C14D Disk Start            0000 (0)\n+1C14F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BFA1 Ext File Attributes   81A40000 (2175008768)\n+1C151 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-1BFA5 Local Header Offset   0000681E (26654)\n-1BFA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C155 Local Header Offset   00006891 (26769)\n+1C159 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BFA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C159: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1BFCB CENTRAL HEADER #49    02014B50 (33639248)\n-1BFCF Created Zip Spec      14 (20) '2.0'\n-1BFD0 Created OS            03 (3) 'Unix'\n-1BFD1 Extract Zip Spec      14 (20) '2.0'\n-1BFD2 Extract OS            00 (0) 'MS-DOS'\n-1BFD3 General Purpose Flag  0800 (2048)\n+1C17B CENTRAL HEADER #49    02014B50 (33639248)\n+1C17F Created Zip Spec      14 (20) '2.0'\n+1C180 Created OS            03 (3) 'Unix'\n+1C181 Extract Zip Spec      14 (20) '2.0'\n+1C182 Extract OS            00 (0) 'MS-DOS'\n+1C183 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BFD5 Compression Method    0008 (8) 'Deflated'\n-1BFD7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BFDB CRC                   0D33E2B2 (221504178)\n-1BFDF Compressed Size       000002CB (715)\n-1BFE3 Uncompressed Size     000005CC (1484)\n-1BFE7 Filename Length       0028 (40)\n-1BFE9 Extra Length          0000 (0)\n-1BFEB Comment Length        0000 (0)\n-1BFED Disk Start            0000 (0)\n-1BFEF Int File Attributes   0000 (0)\n+1C185 Compression Method    0008 (8) 'Deflated'\n+1C187 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C18B CRC                   6D231835 (1831016501)\n+1C18F Compressed Size       000002D2 (722)\n+1C193 Uncompressed Size     000005FB (1531)\n+1C197 Filename Length       0028 (40)\n+1C199 Extra Length          0000 (0)\n+1C19B Comment Length        0000 (0)\n+1C19D Disk Start            0000 (0)\n+1C19F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1BFF1 Ext File Attributes   81A40000 (2175008768)\n+1C1A1 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-1BFF5 Local Header Offset   00006E2E (28206)\n-1BFF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C1A5 Local Header Offset   00006EA1 (28321)\n+1C1A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1BFF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C1A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C021 CENTRAL HEADER #50    02014B50 (33639248)\n-1C025 Created Zip Spec      14 (20) '2.0'\n-1C026 Created OS            03 (3) 'Unix'\n-1C027 Extract Zip Spec      14 (20) '2.0'\n-1C028 Extract OS            00 (0) 'MS-DOS'\n-1C029 General Purpose Flag  0800 (2048)\n+1C1D1 CENTRAL HEADER #50    02014B50 (33639248)\n+1C1D5 Created Zip Spec      14 (20) '2.0'\n+1C1D6 Created OS            03 (3) 'Unix'\n+1C1D7 Extract Zip Spec      14 (20) '2.0'\n+1C1D8 Extract OS            00 (0) 'MS-DOS'\n+1C1D9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C02B Compression Method    0008 (8) 'Deflated'\n-1C02D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C031 CRC                   319BF765 (832304997)\n-1C035 Compressed Size       000002F9 (761)\n-1C039 Uncompressed Size     000006DD (1757)\n-1C03D Filename Length       0026 (38)\n-1C03F Extra Length          0000 (0)\n-1C041 Comment Length        0000 (0)\n-1C043 Disk Start            0000 (0)\n-1C045 Int File Attributes   0000 (0)\n+1C1DB Compression Method    0008 (8) 'Deflated'\n+1C1DD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C1E1 CRC                   2A77FFA2 (712507298)\n+1C1E5 Compressed Size       00000301 (769)\n+1C1E9 Uncompressed Size     00000719 (1817)\n+1C1ED Filename Length       0026 (38)\n+1C1EF Extra Length          0000 (0)\n+1C1F1 Comment Length        0000 (0)\n+1C1F3 Disk Start            0000 (0)\n+1C1F5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C047 Ext File Attributes   81A40000 (2175008768)\n+1C1F7 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-1C04B Local Header Offset   0000713F (28991)\n-1C04F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C1FB Local Header Offset   000071B9 (29113)\n+1C1FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C04F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C1FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C075 CENTRAL HEADER #51    02014B50 (33639248)\n-1C079 Created Zip Spec      14 (20) '2.0'\n-1C07A Created OS            03 (3) 'Unix'\n-1C07B Extract Zip Spec      14 (20) '2.0'\n-1C07C Extract OS            00 (0) 'MS-DOS'\n-1C07D General Purpose Flag  0800 (2048)\n+1C225 CENTRAL HEADER #51    02014B50 (33639248)\n+1C229 Created Zip Spec      14 (20) '2.0'\n+1C22A Created OS            03 (3) 'Unix'\n+1C22B Extract Zip Spec      14 (20) '2.0'\n+1C22C Extract OS            00 (0) 'MS-DOS'\n+1C22D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C07F Compression Method    0008 (8) 'Deflated'\n-1C081 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C085 CRC                   7799251E (2006525214)\n-1C089 Compressed Size       0000063F (1599)\n-1C08D Uncompressed Size     00001541 (5441)\n-1C091 Filename Length       0020 (32)\n-1C093 Extra Length          0000 (0)\n-1C095 Comment Length        0000 (0)\n-1C097 Disk Start            0000 (0)\n-1C099 Int File Attributes   0000 (0)\n+1C22F Compression Method    0008 (8) 'Deflated'\n+1C231 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C235 CRC                   1DB16B63 (498166627)\n+1C239 Compressed Size       0000064F (1615)\n+1C23D Uncompressed Size     000015FD (5629)\n+1C241 Filename Length       0020 (32)\n+1C243 Extra Length          0000 (0)\n+1C245 Comment Length        0000 (0)\n+1C247 Disk Start            0000 (0)\n+1C249 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C09B Ext File Attributes   81A40000 (2175008768)\n+1C24B 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-1C09F Local Header Offset   0000747C (29820)\n-1C0A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C24F Local Header Offset   000074FE (29950)\n+1C253 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C0A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C253: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C0C3 CENTRAL HEADER #52    02014B50 (33639248)\n-1C0C7 Created Zip Spec      14 (20) '2.0'\n-1C0C8 Created OS            03 (3) 'Unix'\n-1C0C9 Extract Zip Spec      14 (20) '2.0'\n-1C0CA Extract OS            00 (0) 'MS-DOS'\n-1C0CB General Purpose Flag  0800 (2048)\n+1C273 CENTRAL HEADER #52    02014B50 (33639248)\n+1C277 Created Zip Spec      14 (20) '2.0'\n+1C278 Created OS            03 (3) 'Unix'\n+1C279 Extract Zip Spec      14 (20) '2.0'\n+1C27A Extract OS            00 (0) 'MS-DOS'\n+1C27B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C0CD Compression Method    0008 (8) 'Deflated'\n-1C0CF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C0D3 CRC                   3BFD1345 (1006441285)\n-1C0D7 Compressed Size       0000027C (636)\n-1C0DB Uncompressed Size     0000059E (1438)\n-1C0DF Filename Length       0026 (38)\n-1C0E1 Extra Length          0000 (0)\n-1C0E3 Comment Length        0000 (0)\n-1C0E5 Disk Start            0000 (0)\n-1C0E7 Int File Attributes   0000 (0)\n+1C27D Compression Method    0008 (8) 'Deflated'\n+1C27F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C283 CRC                   3BFD1345 (1006441285)\n+1C287 Compressed Size       0000027C (636)\n+1C28B Uncompressed Size     0000059E (1438)\n+1C28F Filename Length       0026 (38)\n+1C291 Extra Length          0000 (0)\n+1C293 Comment Length        0000 (0)\n+1C295 Disk Start            0000 (0)\n+1C297 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C0E9 Ext File Attributes   81A40000 (2175008768)\n+1C299 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-1C0ED Local Header Offset   00007AF9 (31481)\n-1C0F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C29D Local Header Offset   00007B8B (31627)\n+1C2A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C0F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C2A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C117 CENTRAL HEADER #53    02014B50 (33639248)\n-1C11B Created Zip Spec      14 (20) '2.0'\n-1C11C Created OS            03 (3) 'Unix'\n-1C11D Extract Zip Spec      14 (20) '2.0'\n-1C11E Extract OS            00 (0) 'MS-DOS'\n-1C11F General Purpose Flag  0800 (2048)\n+1C2C7 CENTRAL HEADER #53    02014B50 (33639248)\n+1C2CB Created Zip Spec      14 (20) '2.0'\n+1C2CC Created OS            03 (3) 'Unix'\n+1C2CD Extract Zip Spec      14 (20) '2.0'\n+1C2CE Extract OS            00 (0) 'MS-DOS'\n+1C2CF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C121 Compression Method    0008 (8) 'Deflated'\n-1C123 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C127 CRC                   8B2B5BC6 (2334874566)\n-1C12B Compressed Size       0000111C (4380)\n-1C12F Uncompressed Size     00005703 (22275)\n-1C133 Filename Length       0024 (36)\n-1C135 Extra Length          0000 (0)\n-1C137 Comment Length        0000 (0)\n-1C139 Disk Start            0000 (0)\n-1C13B Int File Attributes   0000 (0)\n+1C2D1 Compression Method    0008 (8) 'Deflated'\n+1C2D3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C2D7 CRC                   C3E7F091 (3286757521)\n+1C2DB Compressed Size       0000113B (4411)\n+1C2DF Uncompressed Size     00005A5D (23133)\n+1C2E3 Filename Length       0024 (36)\n+1C2E5 Extra Length          0000 (0)\n+1C2E7 Comment Length        0000 (0)\n+1C2E9 Disk Start            0000 (0)\n+1C2EB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C13D Ext File Attributes   81A40000 (2175008768)\n+1C2ED 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-1C141 Local Header Offset   00007DB9 (32185)\n-1C145 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C2F1 Local Header Offset   00007E4B (32331)\n+1C2F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C145: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C2F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C169 CENTRAL HEADER #54    02014B50 (33639248)\n-1C16D Created Zip Spec      14 (20) '2.0'\n-1C16E Created OS            03 (3) 'Unix'\n-1C16F Extract Zip Spec      14 (20) '2.0'\n-1C170 Extract OS            00 (0) 'MS-DOS'\n-1C171 General Purpose Flag  0800 (2048)\n+1C319 CENTRAL HEADER #54    02014B50 (33639248)\n+1C31D Created Zip Spec      14 (20) '2.0'\n+1C31E Created OS            03 (3) 'Unix'\n+1C31F Extract Zip Spec      14 (20) '2.0'\n+1C320 Extract OS            00 (0) 'MS-DOS'\n+1C321 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C173 Compression Method    0008 (8) 'Deflated'\n-1C175 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C179 CRC                   D96AD9D5 (3647658453)\n-1C17D Compressed Size       00000478 (1144)\n-1C181 Uncompressed Size     00000D23 (3363)\n-1C185 Filename Length       0026 (38)\n-1C187 Extra Length          0000 (0)\n-1C189 Comment Length        0000 (0)\n-1C18B Disk Start            0000 (0)\n-1C18D Int File Attributes   0000 (0)\n+1C323 Compression Method    0008 (8) 'Deflated'\n+1C325 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C329 CRC                   CCECA2E4 (3438060260)\n+1C32D Compressed Size       00000481 (1153)\n+1C331 Uncompressed Size     00000D97 (3479)\n+1C335 Filename Length       0026 (38)\n+1C337 Extra Length          0000 (0)\n+1C339 Comment Length        0000 (0)\n+1C33B Disk Start            0000 (0)\n+1C33D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C18F Ext File Attributes   81A40000 (2175008768)\n+1C33F 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-1C193 Local Header Offset   00008F17 (36631)\n-1C197 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C343 Local Header Offset   00008FC8 (36808)\n+1C347 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C197: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C347: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C1BD CENTRAL HEADER #55    02014B50 (33639248)\n-1C1C1 Created Zip Spec      14 (20) '2.0'\n-1C1C2 Created OS            03 (3) 'Unix'\n-1C1C3 Extract Zip Spec      14 (20) '2.0'\n-1C1C4 Extract OS            00 (0) 'MS-DOS'\n-1C1C5 General Purpose Flag  0800 (2048)\n+1C36D CENTRAL HEADER #55    02014B50 (33639248)\n+1C371 Created Zip Spec      14 (20) '2.0'\n+1C372 Created OS            03 (3) 'Unix'\n+1C373 Extract Zip Spec      14 (20) '2.0'\n+1C374 Extract OS            00 (0) 'MS-DOS'\n+1C375 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C1C7 Compression Method    0008 (8) 'Deflated'\n-1C1C9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C1CD CRC                   7D1A8DDF (2098892255)\n-1C1D1 Compressed Size       00000AF0 (2800)\n-1C1D5 Uncompressed Size     00003A8A (14986)\n-1C1D9 Filename Length       0027 (39)\n-1C1DB Extra Length          0000 (0)\n-1C1DD Comment Length        0000 (0)\n-1C1DF Disk Start            0000 (0)\n-1C1E1 Int File Attributes   0000 (0)\n+1C377 Compression Method    0008 (8) 'Deflated'\n+1C379 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C37D CRC                   8DF2CD69 (2381499753)\n+1C381 Compressed Size       00000B03 (2819)\n+1C385 Uncompressed Size     00003C43 (15427)\n+1C389 Filename Length       0027 (39)\n+1C38B Extra Length          0000 (0)\n+1C38D Comment Length        0000 (0)\n+1C38F Disk Start            0000 (0)\n+1C391 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C1E3 Ext File Attributes   81A40000 (2175008768)\n+1C393 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-1C1E7 Local Header Offset   000093D3 (37843)\n-1C1EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C397 Local Header Offset   0000948D (38029)\n+1C39B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C1EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C39B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C212 CENTRAL HEADER #56    02014B50 (33639248)\n-1C216 Created Zip Spec      14 (20) '2.0'\n-1C217 Created OS            03 (3) 'Unix'\n-1C218 Extract Zip Spec      14 (20) '2.0'\n-1C219 Extract OS            00 (0) 'MS-DOS'\n-1C21A General Purpose Flag  0800 (2048)\n+1C3C2 CENTRAL HEADER #56    02014B50 (33639248)\n+1C3C6 Created Zip Spec      14 (20) '2.0'\n+1C3C7 Created OS            03 (3) 'Unix'\n+1C3C8 Extract Zip Spec      14 (20) '2.0'\n+1C3C9 Extract OS            00 (0) 'MS-DOS'\n+1C3CA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C21C Compression Method    0008 (8) 'Deflated'\n-1C21E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C222 CRC                   B577D739 (3044529977)\n-1C226 Compressed Size       00000742 (1858)\n-1C22A Uncompressed Size     0000218E (8590)\n-1C22E Filename Length       0023 (35)\n-1C230 Extra Length          0000 (0)\n-1C232 Comment Length        0000 (0)\n-1C234 Disk Start            0000 (0)\n-1C236 Int File Attributes   0000 (0)\n+1C3CC Compression Method    0008 (8) 'Deflated'\n+1C3CE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C3D2 CRC                   B577D739 (3044529977)\n+1C3D6 Compressed Size       00000742 (1858)\n+1C3DA Uncompressed Size     0000218E (8590)\n+1C3DE Filename Length       0023 (35)\n+1C3E0 Extra Length          0000 (0)\n+1C3E2 Comment Length        0000 (0)\n+1C3E4 Disk Start            0000 (0)\n+1C3E6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C238 Ext File Attributes   81A40000 (2175008768)\n+1C3E8 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-1C23C Local Header Offset   00009F08 (40712)\n-1C240 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C3EC Local Header Offset   00009FD5 (40917)\n+1C3F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C240: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C3F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C263 CENTRAL HEADER #57    02014B50 (33639248)\n-1C267 Created Zip Spec      14 (20) '2.0'\n-1C268 Created OS            03 (3) 'Unix'\n-1C269 Extract Zip Spec      14 (20) '2.0'\n-1C26A Extract OS            00 (0) 'MS-DOS'\n-1C26B General Purpose Flag  0800 (2048)\n+1C413 CENTRAL HEADER #57    02014B50 (33639248)\n+1C417 Created Zip Spec      14 (20) '2.0'\n+1C418 Created OS            03 (3) 'Unix'\n+1C419 Extract Zip Spec      14 (20) '2.0'\n+1C41A Extract OS            00 (0) 'MS-DOS'\n+1C41B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C26D Compression Method    0008 (8) 'Deflated'\n-1C26F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C273 CRC                   1894D2EA (412406506)\n-1C277 Compressed Size       0000040F (1039)\n-1C27B Uncompressed Size     00000B60 (2912)\n-1C27F Filename Length       002A (42)\n-1C281 Extra Length          0000 (0)\n-1C283 Comment Length        0000 (0)\n-1C285 Disk Start            0000 (0)\n-1C287 Int File Attributes   0000 (0)\n+1C41D Compression Method    0008 (8) 'Deflated'\n+1C41F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C423 CRC                   CDFD7CF6 (3455941878)\n+1C427 Compressed Size       0000041A (1050)\n+1C42B Uncompressed Size     00000BBA (3002)\n+1C42F Filename Length       002A (42)\n+1C431 Extra Length          0000 (0)\n+1C433 Comment Length        0000 (0)\n+1C435 Disk Start            0000 (0)\n+1C437 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C289 Ext File Attributes   81A40000 (2175008768)\n+1C439 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-1C28D Local Header Offset   0000A68B (42635)\n-1C291 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C43D Local Header Offset   0000A758 (42840)\n+1C441 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C291: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C441: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C2BB CENTRAL HEADER #58    02014B50 (33639248)\n-1C2BF Created Zip Spec      14 (20) '2.0'\n-1C2C0 Created OS            03 (3) 'Unix'\n-1C2C1 Extract Zip Spec      14 (20) '2.0'\n-1C2C2 Extract OS            00 (0) 'MS-DOS'\n-1C2C3 General Purpose Flag  0800 (2048)\n+1C46B CENTRAL HEADER #58    02014B50 (33639248)\n+1C46F Created Zip Spec      14 (20) '2.0'\n+1C470 Created OS            03 (3) 'Unix'\n+1C471 Extract Zip Spec      14 (20) '2.0'\n+1C472 Extract OS            00 (0) 'MS-DOS'\n+1C473 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C2C5 Compression Method    0008 (8) 'Deflated'\n-1C2C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C2CB CRC                   4977D9A5 (1232591269)\n-1C2CF Compressed Size       0000028D (653)\n-1C2D3 Uncompressed Size     000004A5 (1189)\n-1C2D7 Filename Length       0026 (38)\n-1C2D9 Extra Length          0000 (0)\n-1C2DB Comment Length        0000 (0)\n-1C2DD Disk Start            0000 (0)\n-1C2DF Int File Attributes   0000 (0)\n+1C475 Compression Method    0008 (8) 'Deflated'\n+1C477 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C47B CRC                   32C986CB (852068043)\n+1C47F Compressed Size       00000296 (662)\n+1C483 Uncompressed Size     000004C5 (1221)\n+1C487 Filename Length       0026 (38)\n+1C489 Extra Length          0000 (0)\n+1C48B Comment Length        0000 (0)\n+1C48D Disk Start            0000 (0)\n+1C48F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C2E1 Ext File Attributes   81A40000 (2175008768)\n+1C491 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-1C2E5 Local Header Offset   0000AAE2 (43746)\n-1C2E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C495 Local Header Offset   0000ABBA (43962)\n+1C499 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C2E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C499: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C30F CENTRAL HEADER #59    02014B50 (33639248)\n-1C313 Created Zip Spec      14 (20) '2.0'\n-1C314 Created OS            03 (3) 'Unix'\n-1C315 Extract Zip Spec      14 (20) '2.0'\n-1C316 Extract OS            00 (0) 'MS-DOS'\n-1C317 General Purpose Flag  0800 (2048)\n+1C4BF CENTRAL HEADER #59    02014B50 (33639248)\n+1C4C3 Created Zip Spec      14 (20) '2.0'\n+1C4C4 Created OS            03 (3) 'Unix'\n+1C4C5 Extract Zip Spec      14 (20) '2.0'\n+1C4C6 Extract OS            00 (0) 'MS-DOS'\n+1C4C7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C319 Compression Method    0008 (8) 'Deflated'\n-1C31B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C31F CRC                   300456E0 (805590752)\n-1C323 Compressed Size       0000098D (2445)\n-1C327 Uncompressed Size     00001D9B (7579)\n-1C32B Filename Length       0030 (48)\n-1C32D Extra Length          0000 (0)\n-1C32F Comment Length        0000 (0)\n-1C331 Disk Start            0000 (0)\n-1C333 Int File Attributes   0000 (0)\n+1C4C9 Compression Method    0008 (8) 'Deflated'\n+1C4CB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C4CF CRC                   9594ED56 (2509565270)\n+1C4D3 Compressed Size       0000099C (2460)\n+1C4D7 Uncompressed Size     00001E5D (7773)\n+1C4DB Filename Length       0030 (48)\n+1C4DD Extra Length          0000 (0)\n+1C4DF Comment Length        0000 (0)\n+1C4E1 Disk Start            0000 (0)\n+1C4E3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C335 Ext File Attributes   81A40000 (2175008768)\n+1C4E5 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-1C339 Local Header Offset   0000ADB3 (44467)\n-1C33D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C4E9 Local Header Offset   0000AE94 (44692)\n+1C4ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C33D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C4ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C36D CENTRAL HEADER #60    02014B50 (33639248)\n-1C371 Created Zip Spec      14 (20) '2.0'\n-1C372 Created OS            03 (3) 'Unix'\n-1C373 Extract Zip Spec      14 (20) '2.0'\n-1C374 Extract OS            00 (0) 'MS-DOS'\n-1C375 General Purpose Flag  0800 (2048)\n+1C51D CENTRAL HEADER #60    02014B50 (33639248)\n+1C521 Created Zip Spec      14 (20) '2.0'\n+1C522 Created OS            03 (3) 'Unix'\n+1C523 Extract Zip Spec      14 (20) '2.0'\n+1C524 Extract OS            00 (0) 'MS-DOS'\n+1C525 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C377 Compression Method    0008 (8) 'Deflated'\n-1C379 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C37D CRC                   B52DE397 (3039683479)\n-1C381 Compressed Size       000006FD (1789)\n-1C385 Uncompressed Size     00001623 (5667)\n-1C389 Filename Length       0032 (50)\n-1C38B Extra Length          0000 (0)\n-1C38D Comment Length        0000 (0)\n-1C38F Disk Start            0000 (0)\n-1C391 Int File Attributes   0000 (0)\n+1C527 Compression Method    0008 (8) 'Deflated'\n+1C529 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C52D CRC                   B52DE397 (3039683479)\n+1C531 Compressed Size       000006FD (1789)\n+1C535 Uncompressed Size     00001623 (5667)\n+1C539 Filename Length       0032 (50)\n+1C53B Extra Length          0000 (0)\n+1C53D Comment Length        0000 (0)\n+1C53F Disk Start            0000 (0)\n+1C541 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C393 Ext File Attributes   81A40000 (2175008768)\n+1C543 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-1C397 Local Header Offset   0000B78E (46990)\n-1C39B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C547 Local Header Offset   0000B87E (47230)\n+1C54B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C39B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C54B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C3CD CENTRAL HEADER #61    02014B50 (33639248)\n-1C3D1 Created Zip Spec      14 (20) '2.0'\n-1C3D2 Created OS            03 (3) 'Unix'\n-1C3D3 Extract Zip Spec      14 (20) '2.0'\n-1C3D4 Extract OS            00 (0) 'MS-DOS'\n-1C3D5 General Purpose Flag  0800 (2048)\n+1C57D CENTRAL HEADER #61    02014B50 (33639248)\n+1C581 Created Zip Spec      14 (20) '2.0'\n+1C582 Created OS            03 (3) 'Unix'\n+1C583 Extract Zip Spec      14 (20) '2.0'\n+1C584 Extract OS            00 (0) 'MS-DOS'\n+1C585 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C3D7 Compression Method    0008 (8) 'Deflated'\n-1C3D9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C3DD CRC                   851F3F00 (2233417472)\n-1C3E1 Compressed Size       00000323 (803)\n-1C3E5 Uncompressed Size     00000723 (1827)\n-1C3E9 Filename Length       0032 (50)\n-1C3EB Extra Length          0000 (0)\n-1C3ED Comment Length        0000 (0)\n-1C3EF Disk Start            0000 (0)\n-1C3F1 Int File Attributes   0000 (0)\n+1C587 Compression Method    0008 (8) 'Deflated'\n+1C589 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C58D CRC                   851F3F00 (2233417472)\n+1C591 Compressed Size       00000323 (803)\n+1C595 Uncompressed Size     00000723 (1827)\n+1C599 Filename Length       0032 (50)\n+1C59B Extra Length          0000 (0)\n+1C59D Comment Length        0000 (0)\n+1C59F Disk Start            0000 (0)\n+1C5A1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C3F3 Ext File Attributes   81A40000 (2175008768)\n+1C5A3 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-1C3F7 Local Header Offset   0000BEDB (48859)\n-1C3FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C5A7 Local Header Offset   0000BFCB (49099)\n+1C5AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C3FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C5AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C42D CENTRAL HEADER #62    02014B50 (33639248)\n-1C431 Created Zip Spec      14 (20) '2.0'\n-1C432 Created OS            03 (3) 'Unix'\n-1C433 Extract Zip Spec      14 (20) '2.0'\n-1C434 Extract OS            00 (0) 'MS-DOS'\n-1C435 General Purpose Flag  0800 (2048)\n+1C5DD CENTRAL HEADER #62    02014B50 (33639248)\n+1C5E1 Created Zip Spec      14 (20) '2.0'\n+1C5E2 Created OS            03 (3) 'Unix'\n+1C5E3 Extract Zip Spec      14 (20) '2.0'\n+1C5E4 Extract OS            00 (0) 'MS-DOS'\n+1C5E5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C437 Compression Method    0008 (8) 'Deflated'\n-1C439 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C43D CRC                   86FDBE3E (2264776254)\n-1C441 Compressed Size       0000059A (1434)\n-1C445 Uncompressed Size     00000FB9 (4025)\n-1C449 Filename Length       0031 (49)\n-1C44B Extra Length          0000 (0)\n-1C44D Comment Length        0000 (0)\n-1C44F Disk Start            0000 (0)\n-1C451 Int File Attributes   0000 (0)\n+1C5E7 Compression Method    0008 (8) 'Deflated'\n+1C5E9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C5ED CRC                   86FDBE3E (2264776254)\n+1C5F1 Compressed Size       0000059A (1434)\n+1C5F5 Uncompressed Size     00000FB9 (4025)\n+1C5F9 Filename Length       0031 (49)\n+1C5FB Extra Length          0000 (0)\n+1C5FD Comment Length        0000 (0)\n+1C5FF Disk Start            0000 (0)\n+1C601 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C453 Ext File Attributes   81A40000 (2175008768)\n+1C603 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-1C457 Local Header Offset   0000C24E (49742)\n-1C45B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C607 Local Header Offset   0000C33E (49982)\n+1C60B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C45B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C60B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C48C CENTRAL HEADER #63    02014B50 (33639248)\n-1C490 Created Zip Spec      14 (20) '2.0'\n-1C491 Created OS            03 (3) 'Unix'\n-1C492 Extract Zip Spec      14 (20) '2.0'\n-1C493 Extract OS            00 (0) 'MS-DOS'\n-1C494 General Purpose Flag  0800 (2048)\n+1C63C CENTRAL HEADER #63    02014B50 (33639248)\n+1C640 Created Zip Spec      14 (20) '2.0'\n+1C641 Created OS            03 (3) 'Unix'\n+1C642 Extract Zip Spec      14 (20) '2.0'\n+1C643 Extract OS            00 (0) 'MS-DOS'\n+1C644 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C496 Compression Method    0008 (8) 'Deflated'\n-1C498 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C49C CRC                   A0F5CB6A (2700462954)\n-1C4A0 Compressed Size       000004F5 (1269)\n-1C4A4 Uncompressed Size     00000D48 (3400)\n-1C4A8 Filename Length       0036 (54)\n-1C4AA Extra Length          0000 (0)\n-1C4AC Comment Length        0000 (0)\n-1C4AE Disk Start            0000 (0)\n-1C4B0 Int File Attributes   0000 (0)\n+1C646 Compression Method    0008 (8) 'Deflated'\n+1C648 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C64C CRC                   CA71D506 (3396457734)\n+1C650 Compressed Size       00000501 (1281)\n+1C654 Uncompressed Size     00000D90 (3472)\n+1C658 Filename Length       0036 (54)\n+1C65A Extra Length          0000 (0)\n+1C65C Comment Length        0000 (0)\n+1C65E Disk Start            0000 (0)\n+1C660 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C4B2 Ext File Attributes   81A40000 (2175008768)\n+1C662 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-1C4B6 Local Header Offset   0000C837 (51255)\n-1C4BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C666 Local Header Offset   0000C927 (51495)\n+1C66A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C4BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C66A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C4F0 CENTRAL HEADER #64    02014B50 (33639248)\n-1C4F4 Created Zip Spec      14 (20) '2.0'\n-1C4F5 Created OS            03 (3) 'Unix'\n-1C4F6 Extract Zip Spec      14 (20) '2.0'\n-1C4F7 Extract OS            00 (0) 'MS-DOS'\n-1C4F8 General Purpose Flag  0800 (2048)\n+1C6A0 CENTRAL HEADER #64    02014B50 (33639248)\n+1C6A4 Created Zip Spec      14 (20) '2.0'\n+1C6A5 Created OS            03 (3) 'Unix'\n+1C6A6 Extract Zip Spec      14 (20) '2.0'\n+1C6A7 Extract OS            00 (0) 'MS-DOS'\n+1C6A8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C4FA Compression Method    0008 (8) 'Deflated'\n-1C4FC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C500 CRC                   38AEBD8D (950975885)\n-1C504 Compressed Size       0000074B (1867)\n-1C508 Uncompressed Size     00001838 (6200)\n-1C50C Filename Length       002E (46)\n-1C50E Extra Length          0000 (0)\n-1C510 Comment Length        0000 (0)\n-1C512 Disk Start            0000 (0)\n-1C514 Int File Attributes   0000 (0)\n+1C6AA Compression Method    0008 (8) 'Deflated'\n+1C6AC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C6B0 CRC                   B42DC810 (3022899216)\n+1C6B4 Compressed Size       00000756 (1878)\n+1C6B8 Uncompressed Size     000018CC (6348)\n+1C6BC Filename Length       002E (46)\n+1C6BE Extra Length          0000 (0)\n+1C6C0 Comment Length        0000 (0)\n+1C6C2 Disk Start            0000 (0)\n+1C6C4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C516 Ext File Attributes   81A40000 (2175008768)\n+1C6C6 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-1C51A Local Header Offset   0000CD80 (52608)\n-1C51E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C6CA Local Header Offset   0000CE7C (52860)\n+1C6CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C51E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C6CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C54C CENTRAL HEADER #65    02014B50 (33639248)\n-1C550 Created Zip Spec      14 (20) '2.0'\n-1C551 Created OS            03 (3) 'Unix'\n-1C552 Extract Zip Spec      14 (20) '2.0'\n-1C553 Extract OS            00 (0) 'MS-DOS'\n-1C554 General Purpose Flag  0800 (2048)\n+1C6FC CENTRAL HEADER #65    02014B50 (33639248)\n+1C700 Created Zip Spec      14 (20) '2.0'\n+1C701 Created OS            03 (3) 'Unix'\n+1C702 Extract Zip Spec      14 (20) '2.0'\n+1C703 Extract OS            00 (0) 'MS-DOS'\n+1C704 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C556 Compression Method    0008 (8) 'Deflated'\n-1C558 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C55C CRC                   5D6B9E17 (1567333911)\n-1C560 Compressed Size       000004F9 (1273)\n-1C564 Uncompressed Size     00000CC3 (3267)\n-1C568 Filename Length       0031 (49)\n-1C56A Extra Length          0000 (0)\n-1C56C Comment Length        0000 (0)\n-1C56E Disk Start            0000 (0)\n-1C570 Int File Attributes   0000 (0)\n+1C706 Compression Method    0008 (8) 'Deflated'\n+1C708 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C70C CRC                   5D6B9E17 (1567333911)\n+1C710 Compressed Size       000004F9 (1273)\n+1C714 Uncompressed Size     00000CC3 (3267)\n+1C718 Filename Length       0031 (49)\n+1C71A Extra Length          0000 (0)\n+1C71C Comment Length        0000 (0)\n+1C71E Disk Start            0000 (0)\n+1C720 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C572 Ext File Attributes   81A40000 (2175008768)\n+1C722 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-1C576 Local Header Offset   0000D517 (54551)\n-1C57A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C726 Local Header Offset   0000D61E (54814)\n+1C72A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C57A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C72A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C5AB CENTRAL HEADER #66    02014B50 (33639248)\n-1C5AF Created Zip Spec      14 (20) '2.0'\n-1C5B0 Created OS            03 (3) 'Unix'\n-1C5B1 Extract Zip Spec      14 (20) '2.0'\n-1C5B2 Extract OS            00 (0) 'MS-DOS'\n-1C5B3 General Purpose Flag  0800 (2048)\n+1C75B CENTRAL HEADER #66    02014B50 (33639248)\n+1C75F Created Zip Spec      14 (20) '2.0'\n+1C760 Created OS            03 (3) 'Unix'\n+1C761 Extract Zip Spec      14 (20) '2.0'\n+1C762 Extract OS            00 (0) 'MS-DOS'\n+1C763 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C5B5 Compression Method    0008 (8) 'Deflated'\n-1C5B7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C5BB CRC                   33E95645 (870929989)\n-1C5BF Compressed Size       0000035A (858)\n-1C5C3 Uncompressed Size     0000073C (1852)\n-1C5C7 Filename Length       002B (43)\n-1C5C9 Extra Length          0000 (0)\n-1C5CB Comment Length        0000 (0)\n-1C5CD Disk Start            0000 (0)\n-1C5CF Int File Attributes   0000 (0)\n+1C765 Compression Method    0008 (8) 'Deflated'\n+1C767 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C76B CRC                   33E95645 (870929989)\n+1C76F Compressed Size       0000035A (858)\n+1C773 Uncompressed Size     0000073C (1852)\n+1C777 Filename Length       002B (43)\n+1C779 Extra Length          0000 (0)\n+1C77B Comment Length        0000 (0)\n+1C77D Disk Start            0000 (0)\n+1C77F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C5D1 Ext File Attributes   81A40000 (2175008768)\n+1C781 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-1C5D5 Local Header Offset   0000DA5F (55903)\n-1C5D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C785 Local Header Offset   0000DB66 (56166)\n+1C789 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C5D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C789: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C604 CENTRAL HEADER #67    02014B50 (33639248)\n-1C608 Created Zip Spec      14 (20) '2.0'\n-1C609 Created OS            03 (3) 'Unix'\n-1C60A Extract Zip Spec      14 (20) '2.0'\n-1C60B Extract OS            00 (0) 'MS-DOS'\n-1C60C General Purpose Flag  0800 (2048)\n+1C7B4 CENTRAL HEADER #67    02014B50 (33639248)\n+1C7B8 Created Zip Spec      14 (20) '2.0'\n+1C7B9 Created OS            03 (3) 'Unix'\n+1C7BA Extract Zip Spec      14 (20) '2.0'\n+1C7BB Extract OS            00 (0) 'MS-DOS'\n+1C7BC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C60E Compression Method    0008 (8) 'Deflated'\n-1C610 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C614 CRC                   DF14BD96 (3742678422)\n-1C618 Compressed Size       000006C8 (1736)\n-1C61C Uncompressed Size     000016A6 (5798)\n-1C620 Filename Length       0030 (48)\n-1C622 Extra Length          0000 (0)\n-1C624 Comment Length        0000 (0)\n-1C626 Disk Start            0000 (0)\n-1C628 Int File Attributes   0000 (0)\n+1C7BE Compression Method    0008 (8) 'Deflated'\n+1C7C0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C7C4 CRC                   DF14BD96 (3742678422)\n+1C7C8 Compressed Size       000006C8 (1736)\n+1C7CC Uncompressed Size     000016A6 (5798)\n+1C7D0 Filename Length       0030 (48)\n+1C7D2 Extra Length          0000 (0)\n+1C7D4 Comment Length        0000 (0)\n+1C7D6 Disk Start            0000 (0)\n+1C7D8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C62A Ext File Attributes   81A40000 (2175008768)\n+1C7DA 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-1C62E Local Header Offset   0000DE02 (56834)\n-1C632 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C7DE Local Header Offset   0000DF09 (57097)\n+1C7E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C632: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C7E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C662 CENTRAL HEADER #68    02014B50 (33639248)\n-1C666 Created Zip Spec      14 (20) '2.0'\n-1C667 Created OS            03 (3) 'Unix'\n-1C668 Extract Zip Spec      14 (20) '2.0'\n-1C669 Extract OS            00 (0) 'MS-DOS'\n-1C66A General Purpose Flag  0800 (2048)\n+1C812 CENTRAL HEADER #68    02014B50 (33639248)\n+1C816 Created Zip Spec      14 (20) '2.0'\n+1C817 Created OS            03 (3) 'Unix'\n+1C818 Extract Zip Spec      14 (20) '2.0'\n+1C819 Extract OS            00 (0) 'MS-DOS'\n+1C81A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C66C Compression Method    0008 (8) 'Deflated'\n-1C66E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C672 CRC                   FA17120C (4195815948)\n-1C676 Compressed Size       000005A1 (1441)\n-1C67A Uncompressed Size     00000EE2 (3810)\n-1C67E Filename Length       0033 (51)\n-1C680 Extra Length          0000 (0)\n-1C682 Comment Length        0000 (0)\n-1C684 Disk Start            0000 (0)\n-1C686 Int File Attributes   0000 (0)\n+1C81C Compression Method    0008 (8) 'Deflated'\n+1C81E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C822 CRC                   FA17120C (4195815948)\n+1C826 Compressed Size       000005A1 (1441)\n+1C82A Uncompressed Size     00000EE2 (3810)\n+1C82E Filename Length       0033 (51)\n+1C830 Extra Length          0000 (0)\n+1C832 Comment Length        0000 (0)\n+1C834 Disk Start            0000 (0)\n+1C836 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C688 Ext File Attributes   81A40000 (2175008768)\n+1C838 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-1C68C Local Header Offset   0000E518 (58648)\n-1C690 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C83C Local Header Offset   0000E61F (58911)\n+1C840 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C690: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C840: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C6C3 CENTRAL HEADER #69    02014B50 (33639248)\n-1C6C7 Created Zip Spec      14 (20) '2.0'\n-1C6C8 Created OS            03 (3) 'Unix'\n-1C6C9 Extract Zip Spec      14 (20) '2.0'\n-1C6CA Extract OS            00 (0) 'MS-DOS'\n-1C6CB General Purpose Flag  0800 (2048)\n+1C873 CENTRAL HEADER #69    02014B50 (33639248)\n+1C877 Created Zip Spec      14 (20) '2.0'\n+1C878 Created OS            03 (3) 'Unix'\n+1C879 Extract Zip Spec      14 (20) '2.0'\n+1C87A Extract OS            00 (0) 'MS-DOS'\n+1C87B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C6CD Compression Method    0008 (8) 'Deflated'\n-1C6CF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C6D3 CRC                   BCD228F3 (3167889651)\n-1C6D7 Compressed Size       00000AF2 (2802)\n-1C6DB Uncompressed Size     0000334E (13134)\n-1C6DF Filename Length       002E (46)\n-1C6E1 Extra Length          0000 (0)\n-1C6E3 Comment Length        0000 (0)\n-1C6E5 Disk Start            0000 (0)\n-1C6E7 Int File Attributes   0000 (0)\n+1C87D Compression Method    0008 (8) 'Deflated'\n+1C87F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C883 CRC                   8B21CC44 (2334248004)\n+1C887 Compressed Size       00000AFF (2815)\n+1C88B Uncompressed Size     0000343B (13371)\n+1C88F Filename Length       002E (46)\n+1C891 Extra Length          0000 (0)\n+1C893 Comment Length        0000 (0)\n+1C895 Disk Start            0000 (0)\n+1C897 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C6E9 Ext File Attributes   81A40000 (2175008768)\n+1C899 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-1C6ED Local Header Offset   0000EB0A (60170)\n-1C6F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C89D Local Header Offset   0000EC11 (60433)\n+1C8A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C6F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C8A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C71F CENTRAL HEADER #70    02014B50 (33639248)\n-1C723 Created Zip Spec      14 (20) '2.0'\n-1C724 Created OS            03 (3) 'Unix'\n-1C725 Extract Zip Spec      14 (20) '2.0'\n-1C726 Extract OS            00 (0) 'MS-DOS'\n-1C727 General Purpose Flag  0800 (2048)\n+1C8CF CENTRAL HEADER #70    02014B50 (33639248)\n+1C8D3 Created Zip Spec      14 (20) '2.0'\n+1C8D4 Created OS            03 (3) 'Unix'\n+1C8D5 Extract Zip Spec      14 (20) '2.0'\n+1C8D6 Extract OS            00 (0) 'MS-DOS'\n+1C8D7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C729 Compression Method    0008 (8) 'Deflated'\n-1C72B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C72F CRC                   BDC74FB9 (3183955897)\n-1C733 Compressed Size       00000A8B (2699)\n-1C737 Uncompressed Size     00002C1E (11294)\n-1C73B Filename Length       0032 (50)\n-1C73D Extra Length          0000 (0)\n-1C73F Comment Length        0000 (0)\n-1C741 Disk Start            0000 (0)\n-1C743 Int File Attributes   0000 (0)\n+1C8D9 Compression Method    0008 (8) 'Deflated'\n+1C8DB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C8DF CRC                   BDC74FB9 (3183955897)\n+1C8E3 Compressed Size       00000A8B (2699)\n+1C8E7 Uncompressed Size     00002C1E (11294)\n+1C8EB Filename Length       0032 (50)\n+1C8ED Extra Length          0000 (0)\n+1C8EF Comment Length        0000 (0)\n+1C8F1 Disk Start            0000 (0)\n+1C8F3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C745 Ext File Attributes   81A40000 (2175008768)\n+1C8F5 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-1C749 Local Header Offset   0000F648 (63048)\n-1C74D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C8F9 Local Header Offset   0000F75C (63324)\n+1C8FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C74D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C8FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C77F CENTRAL HEADER #71    02014B50 (33639248)\n-1C783 Created Zip Spec      14 (20) '2.0'\n-1C784 Created OS            03 (3) 'Unix'\n-1C785 Extract Zip Spec      14 (20) '2.0'\n-1C786 Extract OS            00 (0) 'MS-DOS'\n-1C787 General Purpose Flag  0800 (2048)\n+1C92F CENTRAL HEADER #71    02014B50 (33639248)\n+1C933 Created Zip Spec      14 (20) '2.0'\n+1C934 Created OS            03 (3) 'Unix'\n+1C935 Extract Zip Spec      14 (20) '2.0'\n+1C936 Extract OS            00 (0) 'MS-DOS'\n+1C937 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C789 Compression Method    0008 (8) 'Deflated'\n-1C78B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C78F CRC                   4BE7E92F (1273489711)\n-1C793 Compressed Size       00000465 (1125)\n-1C797 Uncompressed Size     00000B3B (2875)\n-1C79B Filename Length       002E (46)\n-1C79D Extra Length          0000 (0)\n-1C79F Comment Length        0000 (0)\n-1C7A1 Disk Start            0000 (0)\n-1C7A3 Int File Attributes   0000 (0)\n+1C939 Compression Method    0008 (8) 'Deflated'\n+1C93B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C93F CRC                   4BE7E92F (1273489711)\n+1C943 Compressed Size       00000465 (1125)\n+1C947 Uncompressed Size     00000B3B (2875)\n+1C94B Filename Length       002E (46)\n+1C94D Extra Length          0000 (0)\n+1C94F Comment Length        0000 (0)\n+1C951 Disk Start            0000 (0)\n+1C953 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C7A5 Ext File Attributes   81A40000 (2175008768)\n+1C955 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-1C7A9 Local Header Offset   00010123 (65827)\n-1C7AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C959 Local Header Offset   00010237 (66103)\n+1C95D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C7AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C95D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C7DB CENTRAL HEADER #72    02014B50 (33639248)\n-1C7DF Created Zip Spec      14 (20) '2.0'\n-1C7E0 Created OS            03 (3) 'Unix'\n-1C7E1 Extract Zip Spec      14 (20) '2.0'\n-1C7E2 Extract OS            00 (0) 'MS-DOS'\n-1C7E3 General Purpose Flag  0800 (2048)\n+1C98B CENTRAL HEADER #72    02014B50 (33639248)\n+1C98F Created Zip Spec      14 (20) '2.0'\n+1C990 Created OS            03 (3) 'Unix'\n+1C991 Extract Zip Spec      14 (20) '2.0'\n+1C992 Extract OS            00 (0) 'MS-DOS'\n+1C993 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C7E5 Compression Method    0008 (8) 'Deflated'\n-1C7E7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C7EB CRC                   EE9BE4CE (4003194062)\n-1C7EF Compressed Size       0000044C (1100)\n-1C7F3 Uncompressed Size     00000A15 (2581)\n-1C7F7 Filename Length       002C (44)\n-1C7F9 Extra Length          0000 (0)\n-1C7FB Comment Length        0000 (0)\n-1C7FD Disk Start            0000 (0)\n-1C7FF Int File Attributes   0000 (0)\n+1C995 Compression Method    0008 (8) 'Deflated'\n+1C997 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C99B CRC                   EE9BE4CE (4003194062)\n+1C99F Compressed Size       0000044C (1100)\n+1C9A3 Uncompressed Size     00000A15 (2581)\n+1C9A7 Filename Length       002C (44)\n+1C9A9 Extra Length          0000 (0)\n+1C9AB Comment Length        0000 (0)\n+1C9AD Disk Start            0000 (0)\n+1C9AF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C801 Ext File Attributes   81A40000 (2175008768)\n+1C9B1 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-1C805 Local Header Offset   000105D4 (67028)\n-1C809 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1C9B5 Local Header Offset   000106E8 (67304)\n+1C9B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C809: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C9B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C835 CENTRAL HEADER #73    02014B50 (33639248)\n-1C839 Created Zip Spec      14 (20) '2.0'\n-1C83A Created OS            03 (3) 'Unix'\n-1C83B Extract Zip Spec      14 (20) '2.0'\n-1C83C Extract OS            00 (0) 'MS-DOS'\n-1C83D General Purpose Flag  0800 (2048)\n+1C9E5 CENTRAL HEADER #73    02014B50 (33639248)\n+1C9E9 Created Zip Spec      14 (20) '2.0'\n+1C9EA Created OS            03 (3) 'Unix'\n+1C9EB Extract Zip Spec      14 (20) '2.0'\n+1C9EC Extract OS            00 (0) 'MS-DOS'\n+1C9ED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C83F Compression Method    0008 (8) 'Deflated'\n-1C841 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C845 CRC                   24C74556 (617039190)\n-1C849 Compressed Size       00000440 (1088)\n-1C84D Uncompressed Size     00000A01 (2561)\n-1C851 Filename Length       002F (47)\n-1C853 Extra Length          0000 (0)\n-1C855 Comment Length        0000 (0)\n-1C857 Disk Start            0000 (0)\n-1C859 Int File Attributes   0000 (0)\n+1C9EF Compression Method    0008 (8) 'Deflated'\n+1C9F1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1C9F5 CRC                   930DE3AE (2467161006)\n+1C9F9 Compressed Size       00000448 (1096)\n+1C9FD Uncompressed Size     00000A3C (2620)\n+1CA01 Filename Length       002F (47)\n+1CA03 Extra Length          0000 (0)\n+1CA05 Comment Length        0000 (0)\n+1CA07 Disk Start            0000 (0)\n+1CA09 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C85B Ext File Attributes   81A40000 (2175008768)\n+1CA0B 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-1C85F Local Header Offset   00010A6A (68202)\n-1C863 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CA0F Local Header Offset   00010B7E (68478)\n+1CA13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C863: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CA13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C892 CENTRAL HEADER #74    02014B50 (33639248)\n-1C896 Created Zip Spec      14 (20) '2.0'\n-1C897 Created OS            03 (3) 'Unix'\n-1C898 Extract Zip Spec      14 (20) '2.0'\n-1C899 Extract OS            00 (0) 'MS-DOS'\n-1C89A General Purpose Flag  0800 (2048)\n+1CA42 CENTRAL HEADER #74    02014B50 (33639248)\n+1CA46 Created Zip Spec      14 (20) '2.0'\n+1CA47 Created OS            03 (3) 'Unix'\n+1CA48 Extract Zip Spec      14 (20) '2.0'\n+1CA49 Extract OS            00 (0) 'MS-DOS'\n+1CA4A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C89C Compression Method    0008 (8) 'Deflated'\n-1C89E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C8A2 CRC                   F1C552FF (4056240895)\n-1C8A6 Compressed Size       0000040A (1034)\n-1C8AA Uncompressed Size     00000A9C (2716)\n-1C8AE Filename Length       0036 (54)\n-1C8B0 Extra Length          0000 (0)\n-1C8B2 Comment Length        0000 (0)\n-1C8B4 Disk Start            0000 (0)\n-1C8B6 Int File Attributes   0000 (0)\n+1CA4C Compression Method    0008 (8) 'Deflated'\n+1CA4E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CA52 CRC                   184AAEF9 (407547641)\n+1CA56 Compressed Size       00000414 (1044)\n+1CA5A Uncompressed Size     00000ADF (2783)\n+1CA5E Filename Length       0036 (54)\n+1CA60 Extra Length          0000 (0)\n+1CA62 Comment Length        0000 (0)\n+1CA64 Disk Start            0000 (0)\n+1CA66 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C8B8 Ext File Attributes   81A40000 (2175008768)\n+1CA68 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-1C8BC Local Header Offset   00010EF7 (69367)\n-1C8C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CA6C Local Header Offset   00011013 (69651)\n+1CA70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C8C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CA70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C8F6 CENTRAL HEADER #75    02014B50 (33639248)\n-1C8FA Created Zip Spec      14 (20) '2.0'\n-1C8FB Created OS            03 (3) 'Unix'\n-1C8FC Extract Zip Spec      14 (20) '2.0'\n-1C8FD Extract OS            00 (0) 'MS-DOS'\n-1C8FE General Purpose Flag  0800 (2048)\n+1CAA6 CENTRAL HEADER #75    02014B50 (33639248)\n+1CAAA Created Zip Spec      14 (20) '2.0'\n+1CAAB Created OS            03 (3) 'Unix'\n+1CAAC Extract Zip Spec      14 (20) '2.0'\n+1CAAD Extract OS            00 (0) 'MS-DOS'\n+1CAAE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C900 Compression Method    0008 (8) 'Deflated'\n-1C902 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C906 CRC                   0D540AED (223611629)\n-1C90A Compressed Size       00000412 (1042)\n-1C90E Uncompressed Size     00000A14 (2580)\n-1C912 Filename Length       002D (45)\n-1C914 Extra Length          0000 (0)\n-1C916 Comment Length        0000 (0)\n-1C918 Disk Start            0000 (0)\n-1C91A Int File Attributes   0000 (0)\n+1CAB0 Compression Method    0008 (8) 'Deflated'\n+1CAB2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CAB6 CRC                   3867D7AC (946329516)\n+1CABA Compressed Size       0000041D (1053)\n+1CABE Uncompressed Size     00000A70 (2672)\n+1CAC2 Filename Length       002D (45)\n+1CAC4 Extra Length          0000 (0)\n+1CAC6 Comment Length        0000 (0)\n+1CAC8 Disk Start            0000 (0)\n+1CACA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C91C Ext File Attributes   81A40000 (2175008768)\n+1CACC 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-1C920 Local Header Offset   00011355 (70485)\n-1C924 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CAD0 Local Header Offset   0001147B (70779)\n+1CAD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C924: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CAD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C951 CENTRAL HEADER #76    02014B50 (33639248)\n-1C955 Created Zip Spec      14 (20) '2.0'\n-1C956 Created OS            03 (3) 'Unix'\n-1C957 Extract Zip Spec      14 (20) '2.0'\n-1C958 Extract OS            00 (0) 'MS-DOS'\n-1C959 General Purpose Flag  0800 (2048)\n+1CB01 CENTRAL HEADER #76    02014B50 (33639248)\n+1CB05 Created Zip Spec      14 (20) '2.0'\n+1CB06 Created OS            03 (3) 'Unix'\n+1CB07 Extract Zip Spec      14 (20) '2.0'\n+1CB08 Extract OS            00 (0) 'MS-DOS'\n+1CB09 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C95B Compression Method    0008 (8) 'Deflated'\n-1C95D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C961 CRC                   00E586BE (15042238)\n-1C965 Compressed Size       0000032B (811)\n-1C969 Uncompressed Size     00000678 (1656)\n-1C96D Filename Length       002F (47)\n-1C96F Extra Length          0000 (0)\n-1C971 Comment Length        0000 (0)\n-1C973 Disk Start            0000 (0)\n-1C975 Int File Attributes   0000 (0)\n+1CB0B Compression Method    0008 (8) 'Deflated'\n+1CB0D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CB11 CRC                   00E586BE (15042238)\n+1CB15 Compressed Size       0000032B (811)\n+1CB19 Uncompressed Size     00000678 (1656)\n+1CB1D Filename Length       002F (47)\n+1CB1F Extra Length          0000 (0)\n+1CB21 Comment Length        0000 (0)\n+1CB23 Disk Start            0000 (0)\n+1CB25 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C977 Ext File Attributes   81A40000 (2175008768)\n+1CB27 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-1C97B Local Header Offset   000117B2 (71602)\n-1C97F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CB2B Local Header Offset   000118E3 (71907)\n+1CB2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C97F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CB2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1C9AE CENTRAL HEADER #77    02014B50 (33639248)\n-1C9B2 Created Zip Spec      14 (20) '2.0'\n-1C9B3 Created OS            03 (3) 'Unix'\n-1C9B4 Extract Zip Spec      14 (20) '2.0'\n-1C9B5 Extract OS            00 (0) 'MS-DOS'\n-1C9B6 General Purpose Flag  0800 (2048)\n+1CB5E CENTRAL HEADER #77    02014B50 (33639248)\n+1CB62 Created Zip Spec      14 (20) '2.0'\n+1CB63 Created OS            03 (3) 'Unix'\n+1CB64 Extract Zip Spec      14 (20) '2.0'\n+1CB65 Extract OS            00 (0) 'MS-DOS'\n+1CB66 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C9B8 Compression Method    0008 (8) 'Deflated'\n-1C9BA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1C9BE CRC                   E1C5881F (3787819039)\n-1C9C2 Compressed Size       00000336 (822)\n-1C9C6 Uncompressed Size     000006AD (1709)\n-1C9CA Filename Length       003C (60)\n-1C9CC Extra Length          0000 (0)\n-1C9CE Comment Length        0000 (0)\n-1C9D0 Disk Start            0000 (0)\n-1C9D2 Int File Attributes   0000 (0)\n+1CB68 Compression Method    0008 (8) 'Deflated'\n+1CB6A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CB6E CRC                   E1C5881F (3787819039)\n+1CB72 Compressed Size       00000336 (822)\n+1CB76 Uncompressed Size     000006AD (1709)\n+1CB7A Filename Length       003C (60)\n+1CB7C Extra Length          0000 (0)\n+1CB7E Comment Length        0000 (0)\n+1CB80 Disk Start            0000 (0)\n+1CB82 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1C9D4 Ext File Attributes   81A40000 (2175008768)\n+1CB84 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-1C9D8 Local Header Offset   00011B2A (72490)\n-1C9DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CB88 Local Header Offset   00011C5B (72795)\n+1CB8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C9DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CB8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CA18 CENTRAL HEADER #78    02014B50 (33639248)\n-1CA1C Created Zip Spec      14 (20) '2.0'\n-1CA1D Created OS            03 (3) 'Unix'\n-1CA1E Extract Zip Spec      14 (20) '2.0'\n-1CA1F Extract OS            00 (0) 'MS-DOS'\n-1CA20 General Purpose Flag  0800 (2048)\n+1CBC8 CENTRAL HEADER #78    02014B50 (33639248)\n+1CBCC Created Zip Spec      14 (20) '2.0'\n+1CBCD Created OS            03 (3) 'Unix'\n+1CBCE Extract Zip Spec      14 (20) '2.0'\n+1CBCF Extract OS            00 (0) 'MS-DOS'\n+1CBD0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CA22 Compression Method    0008 (8) 'Deflated'\n-1CA24 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CA28 CRC                   FE9FE6BA (4271892154)\n-1CA2C Compressed Size       00000261 (609)\n-1CA30 Uncompressed Size     00000515 (1301)\n-1CA34 Filename Length       003A (58)\n-1CA36 Extra Length          0000 (0)\n-1CA38 Comment Length        0000 (0)\n-1CA3A Disk Start            0000 (0)\n-1CA3C Int File Attributes   0000 (0)\n+1CBD2 Compression Method    0008 (8) 'Deflated'\n+1CBD4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CBD8 CRC                   FE9FE6BA (4271892154)\n+1CBDC Compressed Size       00000261 (609)\n+1CBE0 Uncompressed Size     00000515 (1301)\n+1CBE4 Filename Length       003A (58)\n+1CBE6 Extra Length          0000 (0)\n+1CBE8 Comment Length        0000 (0)\n+1CBEA Disk Start            0000 (0)\n+1CBEC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CA3E Ext File Attributes   81A40000 (2175008768)\n+1CBEE 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-1CA42 Local Header Offset   00011EBA (73402)\n-1CA46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CBF2 Local Header Offset   00011FEB (73707)\n+1CBF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CA46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CBF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CA80 CENTRAL HEADER #79    02014B50 (33639248)\n-1CA84 Created Zip Spec      14 (20) '2.0'\n-1CA85 Created OS            03 (3) 'Unix'\n-1CA86 Extract Zip Spec      14 (20) '2.0'\n-1CA87 Extract OS            00 (0) 'MS-DOS'\n-1CA88 General Purpose Flag  0800 (2048)\n+1CC30 CENTRAL HEADER #79    02014B50 (33639248)\n+1CC34 Created Zip Spec      14 (20) '2.0'\n+1CC35 Created OS            03 (3) 'Unix'\n+1CC36 Extract Zip Spec      14 (20) '2.0'\n+1CC37 Extract OS            00 (0) 'MS-DOS'\n+1CC38 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CA8A Compression Method    0008 (8) 'Deflated'\n-1CA8C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CA90 CRC                   07F77085 (133656709)\n-1CA94 Compressed Size       00000267 (615)\n-1CA98 Uncompressed Size     000004F7 (1271)\n-1CA9C Filename Length       0039 (57)\n-1CA9E Extra Length          0000 (0)\n-1CAA0 Comment Length        0000 (0)\n-1CAA2 Disk Start            0000 (0)\n-1CAA4 Int File Attributes   0000 (0)\n+1CC3A Compression Method    0008 (8) 'Deflated'\n+1CC3C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CC40 CRC                   07F77085 (133656709)\n+1CC44 Compressed Size       00000267 (615)\n+1CC48 Uncompressed Size     000004F7 (1271)\n+1CC4C Filename Length       0039 (57)\n+1CC4E Extra Length          0000 (0)\n+1CC50 Comment Length        0000 (0)\n+1CC52 Disk Start            0000 (0)\n+1CC54 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CAA6 Ext File Attributes   81A40000 (2175008768)\n+1CC56 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-1CAAA Local Header Offset   00012173 (74099)\n-1CAAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CC5A Local Header Offset   000122A4 (74404)\n+1CC5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CAAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CC5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CAE7 CENTRAL HEADER #80    02014B50 (33639248)\n-1CAEB Created Zip Spec      14 (20) '2.0'\n-1CAEC Created OS            03 (3) 'Unix'\n-1CAED Extract Zip Spec      14 (20) '2.0'\n-1CAEE Extract OS            00 (0) 'MS-DOS'\n-1CAEF General Purpose Flag  0800 (2048)\n+1CC97 CENTRAL HEADER #80    02014B50 (33639248)\n+1CC9B Created Zip Spec      14 (20) '2.0'\n+1CC9C Created OS            03 (3) 'Unix'\n+1CC9D Extract Zip Spec      14 (20) '2.0'\n+1CC9E Extract OS            00 (0) 'MS-DOS'\n+1CC9F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CAF1 Compression Method    0008 (8) 'Deflated'\n-1CAF3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CAF7 CRC                   334FA791 (860858257)\n-1CAFB Compressed Size       000003EB (1003)\n-1CAFF Uncompressed Size     00000C9A (3226)\n-1CB03 Filename Length       003A (58)\n-1CB05 Extra Length          0000 (0)\n-1CB07 Comment Length        0000 (0)\n-1CB09 Disk Start            0000 (0)\n-1CB0B Int File Attributes   0000 (0)\n+1CCA1 Compression Method    0008 (8) 'Deflated'\n+1CCA3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CCA7 CRC                   334FA791 (860858257)\n+1CCAB Compressed Size       000003EB (1003)\n+1CCAF Uncompressed Size     00000C9A (3226)\n+1CCB3 Filename Length       003A (58)\n+1CCB5 Extra Length          0000 (0)\n+1CCB7 Comment Length        0000 (0)\n+1CCB9 Disk Start            0000 (0)\n+1CCBB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CB0D Ext File Attributes   81A40000 (2175008768)\n+1CCBD 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-1CB11 Local Header Offset   00012431 (74801)\n-1CB15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CCC1 Local Header Offset   00012562 (75106)\n+1CCC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CB15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CCC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CB4F CENTRAL HEADER #81    02014B50 (33639248)\n-1CB53 Created Zip Spec      14 (20) '2.0'\n-1CB54 Created OS            03 (3) 'Unix'\n-1CB55 Extract Zip Spec      14 (20) '2.0'\n-1CB56 Extract OS            00 (0) 'MS-DOS'\n-1CB57 General Purpose Flag  0800 (2048)\n+1CCFF CENTRAL HEADER #81    02014B50 (33639248)\n+1CD03 Created Zip Spec      14 (20) '2.0'\n+1CD04 Created OS            03 (3) 'Unix'\n+1CD05 Extract Zip Spec      14 (20) '2.0'\n+1CD06 Extract OS            00 (0) 'MS-DOS'\n+1CD07 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CB59 Compression Method    0008 (8) 'Deflated'\n-1CB5B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CB5F CRC                   5C26FEE4 (1546059492)\n-1CB63 Compressed Size       00000436 (1078)\n-1CB67 Uncompressed Size     00000D57 (3415)\n-1CB6B Filename Length       0039 (57)\n-1CB6D Extra Length          0000 (0)\n-1CB6F Comment Length        0000 (0)\n-1CB71 Disk Start            0000 (0)\n-1CB73 Int File Attributes   0000 (0)\n+1CD09 Compression Method    0008 (8) 'Deflated'\n+1CD0B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CD0F CRC                   5C26FEE4 (1546059492)\n+1CD13 Compressed Size       00000436 (1078)\n+1CD17 Uncompressed Size     00000D57 (3415)\n+1CD1B Filename Length       0039 (57)\n+1CD1D Extra Length          0000 (0)\n+1CD1F Comment Length        0000 (0)\n+1CD21 Disk Start            0000 (0)\n+1CD23 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CB75 Ext File Attributes   81A40000 (2175008768)\n+1CD25 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-1CB79 Local Header Offset   00012874 (75892)\n-1CB7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CD29 Local Header Offset   000129A5 (76197)\n+1CD2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CB7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CD2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CBB6 CENTRAL HEADER #82    02014B50 (33639248)\n-1CBBA Created Zip Spec      14 (20) '2.0'\n-1CBBB Created OS            03 (3) 'Unix'\n-1CBBC Extract Zip Spec      14 (20) '2.0'\n-1CBBD Extract OS            00 (0) 'MS-DOS'\n-1CBBE General Purpose Flag  0800 (2048)\n+1CD66 CENTRAL HEADER #82    02014B50 (33639248)\n+1CD6A Created Zip Spec      14 (20) '2.0'\n+1CD6B Created OS            03 (3) 'Unix'\n+1CD6C Extract Zip Spec      14 (20) '2.0'\n+1CD6D Extract OS            00 (0) 'MS-DOS'\n+1CD6E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CBC0 Compression Method    0008 (8) 'Deflated'\n-1CBC2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CBC6 CRC                   EC8B751D (3968562461)\n-1CBCA Compressed Size       0000037F (895)\n-1CBCE Uncompressed Size     000008F6 (2294)\n-1CBD2 Filename Length       0033 (51)\n-1CBD4 Extra Length          0000 (0)\n-1CBD6 Comment Length        0000 (0)\n-1CBD8 Disk Start            0000 (0)\n-1CBDA Int File Attributes   0000 (0)\n+1CD70 Compression Method    0008 (8) 'Deflated'\n+1CD72 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CD76 CRC                   EC8B751D (3968562461)\n+1CD7A Compressed Size       0000037F (895)\n+1CD7E Uncompressed Size     000008F6 (2294)\n+1CD82 Filename Length       0033 (51)\n+1CD84 Extra Length          0000 (0)\n+1CD86 Comment Length        0000 (0)\n+1CD88 Disk Start            0000 (0)\n+1CD8A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CBDC Ext File Attributes   81A40000 (2175008768)\n+1CD8C 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-1CBE0 Local Header Offset   00012D01 (77057)\n-1CBE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CD90 Local Header Offset   00012E32 (77362)\n+1CD94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CBE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CD94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CC17 CENTRAL HEADER #83    02014B50 (33639248)\n-1CC1B Created Zip Spec      14 (20) '2.0'\n-1CC1C Created OS            03 (3) 'Unix'\n-1CC1D Extract Zip Spec      14 (20) '2.0'\n-1CC1E Extract OS            00 (0) 'MS-DOS'\n-1CC1F General Purpose Flag  0800 (2048)\n+1CDC7 CENTRAL HEADER #83    02014B50 (33639248)\n+1CDCB Created Zip Spec      14 (20) '2.0'\n+1CDCC Created OS            03 (3) 'Unix'\n+1CDCD Extract Zip Spec      14 (20) '2.0'\n+1CDCE Extract OS            00 (0) 'MS-DOS'\n+1CDCF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CC21 Compression Method    0008 (8) 'Deflated'\n-1CC23 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CC27 CRC                   A5C33F03 (2781036291)\n-1CC2B Compressed Size       0000096F (2415)\n-1CC2F Uncompressed Size     00001F52 (8018)\n-1CC33 Filename Length       0032 (50)\n-1CC35 Extra Length          0000 (0)\n-1CC37 Comment Length        0000 (0)\n-1CC39 Disk Start            0000 (0)\n-1CC3B Int File Attributes   0000 (0)\n+1CDD1 Compression Method    0008 (8) 'Deflated'\n+1CDD3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CDD7 CRC                   62F535FA (1660237306)\n+1CDDB Compressed Size       00000980 (2432)\n+1CDDF Uncompressed Size     00002022 (8226)\n+1CDE3 Filename Length       0032 (50)\n+1CDE5 Extra Length          0000 (0)\n+1CDE7 Comment Length        0000 (0)\n+1CDE9 Disk Start            0000 (0)\n+1CDEB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CC3D Ext File Attributes   81A40000 (2175008768)\n+1CDED 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-1CC41 Local Header Offset   000130D1 (78033)\n-1CC45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CDF1 Local Header Offset   00013202 (78338)\n+1CDF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CC45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CDF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CC77 CENTRAL HEADER #84    02014B50 (33639248)\n-1CC7B Created Zip Spec      14 (20) '2.0'\n-1CC7C Created OS            03 (3) 'Unix'\n-1CC7D Extract Zip Spec      14 (20) '2.0'\n-1CC7E Extract OS            00 (0) 'MS-DOS'\n-1CC7F General Purpose Flag  0800 (2048)\n+1CE27 CENTRAL HEADER #84    02014B50 (33639248)\n+1CE2B Created Zip Spec      14 (20) '2.0'\n+1CE2C Created OS            03 (3) 'Unix'\n+1CE2D Extract Zip Spec      14 (20) '2.0'\n+1CE2E Extract OS            00 (0) 'MS-DOS'\n+1CE2F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CC81 Compression Method    0008 (8) 'Deflated'\n-1CC83 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CC87 CRC                   861CA040 (2250022976)\n-1CC8B Compressed Size       00000567 (1383)\n-1CC8F Uncompressed Size     000010FE (4350)\n-1CC93 Filename Length       0033 (51)\n-1CC95 Extra Length          0000 (0)\n-1CC97 Comment Length        0000 (0)\n-1CC99 Disk Start            0000 (0)\n-1CC9B Int File Attributes   0000 (0)\n+1CE31 Compression Method    0008 (8) 'Deflated'\n+1CE33 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CE37 CRC                   56578DF7 (1448578551)\n+1CE3B Compressed Size       00000572 (1394)\n+1CE3F Uncompressed Size     00001172 (4466)\n+1CE43 Filename Length       0033 (51)\n+1CE45 Extra Length          0000 (0)\n+1CE47 Comment Length        0000 (0)\n+1CE49 Disk Start            0000 (0)\n+1CE4B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CC9D Ext File Attributes   81A40000 (2175008768)\n+1CE4D 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-1CCA1 Local Header Offset   00013A90 (80528)\n-1CCA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CE51 Local Header Offset   00013BD2 (80850)\n+1CE55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CCA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CE55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CCD8 CENTRAL HEADER #85    02014B50 (33639248)\n-1CCDC Created Zip Spec      14 (20) '2.0'\n-1CCDD Created OS            03 (3) 'Unix'\n-1CCDE Extract Zip Spec      14 (20) '2.0'\n-1CCDF Extract OS            00 (0) 'MS-DOS'\n-1CCE0 General Purpose Flag  0800 (2048)\n+1CE88 CENTRAL HEADER #85    02014B50 (33639248)\n+1CE8C Created Zip Spec      14 (20) '2.0'\n+1CE8D Created OS            03 (3) 'Unix'\n+1CE8E Extract Zip Spec      14 (20) '2.0'\n+1CE8F Extract OS            00 (0) 'MS-DOS'\n+1CE90 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CCE2 Compression Method    0008 (8) 'Deflated'\n-1CCE4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CCE8 CRC                   1140D3D7 (289461207)\n-1CCEC Compressed Size       000008D2 (2258)\n-1CCF0 Uncompressed Size     000021E4 (8676)\n-1CCF4 Filename Length       0038 (56)\n-1CCF6 Extra Length          0000 (0)\n-1CCF8 Comment Length        0000 (0)\n-1CCFA Disk Start            0000 (0)\n-1CCFC Int File Attributes   0000 (0)\n+1CE92 Compression Method    0008 (8) 'Deflated'\n+1CE94 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CE98 CRC                   1140D3D7 (289461207)\n+1CE9C Compressed Size       000008D2 (2258)\n+1CEA0 Uncompressed Size     000021E4 (8676)\n+1CEA4 Filename Length       0038 (56)\n+1CEA6 Extra Length          0000 (0)\n+1CEA8 Comment Length        0000 (0)\n+1CEAA Disk Start            0000 (0)\n+1CEAC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CCFE Ext File Attributes   81A40000 (2175008768)\n+1CEAE 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-1CD02 Local Header Offset   00014048 (81992)\n-1CD06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CEB2 Local Header Offset   00014195 (82325)\n+1CEB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CD06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CEB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CD3E CENTRAL HEADER #86    02014B50 (33639248)\n-1CD42 Created Zip Spec      14 (20) '2.0'\n-1CD43 Created OS            03 (3) 'Unix'\n-1CD44 Extract Zip Spec      14 (20) '2.0'\n-1CD45 Extract OS            00 (0) 'MS-DOS'\n-1CD46 General Purpose Flag  0800 (2048)\n+1CEEE CENTRAL HEADER #86    02014B50 (33639248)\n+1CEF2 Created Zip Spec      14 (20) '2.0'\n+1CEF3 Created OS            03 (3) 'Unix'\n+1CEF4 Extract Zip Spec      14 (20) '2.0'\n+1CEF5 Extract OS            00 (0) 'MS-DOS'\n+1CEF6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CD48 Compression Method    0008 (8) 'Deflated'\n-1CD4A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CD4E CRC                   90398B66 (2419690342)\n-1CD52 Compressed Size       00000500 (1280)\n-1CD56 Uncompressed Size     00000F56 (3926)\n-1CD5A Filename Length       0035 (53)\n-1CD5C Extra Length          0000 (0)\n-1CD5E Comment Length        0000 (0)\n-1CD60 Disk Start            0000 (0)\n-1CD62 Int File Attributes   0000 (0)\n+1CEF8 Compression Method    0008 (8) 'Deflated'\n+1CEFA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CEFE CRC                   B6A13567 (3064018279)\n+1CF02 Compressed Size       0000050A (1290)\n+1CF06 Uncompressed Size     00000FBC (4028)\n+1CF0A Filename Length       0035 (53)\n+1CF0C Extra Length          0000 (0)\n+1CF0E Comment Length        0000 (0)\n+1CF10 Disk Start            0000 (0)\n+1CF12 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CD64 Ext File Attributes   81A40000 (2175008768)\n+1CF14 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-1CD68 Local Header Offset   00014970 (84336)\n-1CD6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CF18 Local Header Offset   00014ABD (84669)\n+1CF1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CD6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CF1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CDA1 CENTRAL HEADER #87    02014B50 (33639248)\n-1CDA5 Created Zip Spec      14 (20) '2.0'\n-1CDA6 Created OS            03 (3) 'Unix'\n-1CDA7 Extract Zip Spec      14 (20) '2.0'\n-1CDA8 Extract OS            00 (0) 'MS-DOS'\n-1CDA9 General Purpose Flag  0800 (2048)\n+1CF51 CENTRAL HEADER #87    02014B50 (33639248)\n+1CF55 Created Zip Spec      14 (20) '2.0'\n+1CF56 Created OS            03 (3) 'Unix'\n+1CF57 Extract Zip Spec      14 (20) '2.0'\n+1CF58 Extract OS            00 (0) 'MS-DOS'\n+1CF59 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CDAB Compression Method    0008 (8) 'Deflated'\n-1CDAD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CDB1 CRC                   8054E5B8 (2153047480)\n-1CDB5 Compressed Size       00000439 (1081)\n-1CDB9 Uncompressed Size     00000FA9 (4009)\n-1CDBD Filename Length       002D (45)\n-1CDBF Extra Length          0000 (0)\n-1CDC1 Comment Length        0000 (0)\n-1CDC3 Disk Start            0000 (0)\n-1CDC5 Int File Attributes   0000 (0)\n+1CF5B Compression Method    0008 (8) 'Deflated'\n+1CF5D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CF61 CRC                   0A163D1E (169229598)\n+1CF65 Compressed Size       00000444 (1092)\n+1CF69 Uncompressed Size     0000101E (4126)\n+1CF6D Filename Length       002D (45)\n+1CF6F Extra Length          0000 (0)\n+1CF71 Comment Length        0000 (0)\n+1CF73 Disk Start            0000 (0)\n+1CF75 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CDC7 Ext File Attributes   81A40000 (2175008768)\n+1CF77 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-1CDCB Local Header Offset   00014EC3 (85699)\n-1CDCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CF7B Local Header Offset   0001501A (86042)\n+1CF7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CDCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CF7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CDFC CENTRAL HEADER #88    02014B50 (33639248)\n-1CE00 Created Zip Spec      14 (20) '2.0'\n-1CE01 Created OS            03 (3) 'Unix'\n-1CE02 Extract Zip Spec      14 (20) '2.0'\n-1CE03 Extract OS            00 (0) 'MS-DOS'\n-1CE04 General Purpose Flag  0800 (2048)\n+1CFAC CENTRAL HEADER #88    02014B50 (33639248)\n+1CFB0 Created Zip Spec      14 (20) '2.0'\n+1CFB1 Created OS            03 (3) 'Unix'\n+1CFB2 Extract Zip Spec      14 (20) '2.0'\n+1CFB3 Extract OS            00 (0) 'MS-DOS'\n+1CFB4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CE06 Compression Method    0008 (8) 'Deflated'\n-1CE08 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CE0C CRC                   873A5673 (2268747379)\n-1CE10 Compressed Size       000002EA (746)\n-1CE14 Uncompressed Size     0000072D (1837)\n-1CE18 Filename Length       0031 (49)\n-1CE1A Extra Length          0000 (0)\n-1CE1C Comment Length        0000 (0)\n-1CE1E Disk Start            0000 (0)\n-1CE20 Int File Attributes   0000 (0)\n+1CFB6 Compression Method    0008 (8) 'Deflated'\n+1CFB8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1CFBC CRC                   873A5673 (2268747379)\n+1CFC0 Compressed Size       000002EA (746)\n+1CFC4 Uncompressed Size     0000072D (1837)\n+1CFC8 Filename Length       0031 (49)\n+1CFCA Extra Length          0000 (0)\n+1CFCC Comment Length        0000 (0)\n+1CFCE Disk Start            0000 (0)\n+1CFD0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CE22 Ext File Attributes   81A40000 (2175008768)\n+1CFD2 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-1CE26 Local Header Offset   00015347 (86855)\n-1CE2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CFD6 Local Header Offset   000154A9 (87209)\n+1CFDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CE2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CFDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CE5B CENTRAL HEADER #89    02014B50 (33639248)\n-1CE5F Created Zip Spec      14 (20) '2.0'\n-1CE60 Created OS            03 (3) 'Unix'\n-1CE61 Extract Zip Spec      14 (20) '2.0'\n-1CE62 Extract OS            00 (0) 'MS-DOS'\n-1CE63 General Purpose Flag  0800 (2048)\n+1D00B CENTRAL HEADER #89    02014B50 (33639248)\n+1D00F Created Zip Spec      14 (20) '2.0'\n+1D010 Created OS            03 (3) 'Unix'\n+1D011 Extract Zip Spec      14 (20) '2.0'\n+1D012 Extract OS            00 (0) 'MS-DOS'\n+1D013 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CE65 Compression Method    0008 (8) 'Deflated'\n-1CE67 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CE6B CRC                   B63E72D7 (3057545943)\n-1CE6F Compressed Size       0000049E (1182)\n-1CE73 Uncompressed Size     00000D50 (3408)\n-1CE77 Filename Length       0038 (56)\n-1CE79 Extra Length          0000 (0)\n-1CE7B Comment Length        0000 (0)\n-1CE7D Disk Start            0000 (0)\n-1CE7F Int File Attributes   0000 (0)\n+1D015 Compression Method    0008 (8) 'Deflated'\n+1D017 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D01B CRC                   B63E72D7 (3057545943)\n+1D01F Compressed Size       0000049E (1182)\n+1D023 Uncompressed Size     00000D50 (3408)\n+1D027 Filename Length       0038 (56)\n+1D029 Extra Length          0000 (0)\n+1D02B Comment Length        0000 (0)\n+1D02D Disk Start            0000 (0)\n+1D02F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CE81 Ext File Attributes   81A40000 (2175008768)\n+1D031 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-1CE85 Local Header Offset   00015680 (87680)\n-1CE89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D035 Local Header Offset   000157E2 (88034)\n+1D039 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CE89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D039: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CEC1 CENTRAL HEADER #90    02014B50 (33639248)\n-1CEC5 Created Zip Spec      14 (20) '2.0'\n-1CEC6 Created OS            03 (3) 'Unix'\n-1CEC7 Extract Zip Spec      14 (20) '2.0'\n-1CEC8 Extract OS            00 (0) 'MS-DOS'\n-1CEC9 General Purpose Flag  0800 (2048)\n+1D071 CENTRAL HEADER #90    02014B50 (33639248)\n+1D075 Created Zip Spec      14 (20) '2.0'\n+1D076 Created OS            03 (3) 'Unix'\n+1D077 Extract Zip Spec      14 (20) '2.0'\n+1D078 Extract OS            00 (0) 'MS-DOS'\n+1D079 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CECB Compression Method    0008 (8) 'Deflated'\n-1CECD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CED1 CRC                   C40EC84E (3289303118)\n-1CED5 Compressed Size       00000434 (1076)\n-1CED9 Uncompressed Size     00000D18 (3352)\n-1CEDD Filename Length       003A (58)\n-1CEDF Extra Length          0000 (0)\n-1CEE1 Comment Length        0000 (0)\n-1CEE3 Disk Start            0000 (0)\n-1CEE5 Int File Attributes   0000 (0)\n+1D07B Compression Method    0008 (8) 'Deflated'\n+1D07D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D081 CRC                   C40EC84E (3289303118)\n+1D085 Compressed Size       00000434 (1076)\n+1D089 Uncompressed Size     00000D18 (3352)\n+1D08D Filename Length       003A (58)\n+1D08F Extra Length          0000 (0)\n+1D091 Comment Length        0000 (0)\n+1D093 Disk Start            0000 (0)\n+1D095 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CEE7 Ext File Attributes   81A40000 (2175008768)\n+1D097 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-1CEEB Local Header Offset   00015B74 (88948)\n-1CEEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D09B Local Header Offset   00015CD6 (89302)\n+1D09F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CEEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D09F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CF29 CENTRAL HEADER #91    02014B50 (33639248)\n-1CF2D Created Zip Spec      14 (20) '2.0'\n-1CF2E Created OS            03 (3) 'Unix'\n-1CF2F Extract Zip Spec      14 (20) '2.0'\n-1CF30 Extract OS            00 (0) 'MS-DOS'\n-1CF31 General Purpose Flag  0800 (2048)\n+1D0D9 CENTRAL HEADER #91    02014B50 (33639248)\n+1D0DD Created Zip Spec      14 (20) '2.0'\n+1D0DE Created OS            03 (3) 'Unix'\n+1D0DF Extract Zip Spec      14 (20) '2.0'\n+1D0E0 Extract OS            00 (0) 'MS-DOS'\n+1D0E1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CF33 Compression Method    0008 (8) 'Deflated'\n-1CF35 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CF39 CRC                   7D5510EE (2102726894)\n-1CF3D Compressed Size       000004C7 (1223)\n-1CF41 Uncompressed Size     00000DAE (3502)\n-1CF45 Filename Length       0036 (54)\n-1CF47 Extra Length          0000 (0)\n-1CF49 Comment Length        0000 (0)\n-1CF4B Disk Start            0000 (0)\n-1CF4D Int File Attributes   0000 (0)\n+1D0E3 Compression Method    0008 (8) 'Deflated'\n+1D0E5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D0E9 CRC                   3F21380C (1059141644)\n+1D0ED Compressed Size       000004D3 (1235)\n+1D0F1 Uncompressed Size     00000E11 (3601)\n+1D0F5 Filename Length       0036 (54)\n+1D0F7 Extra Length          0000 (0)\n+1D0F9 Comment Length        0000 (0)\n+1D0FB Disk Start            0000 (0)\n+1D0FD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CF4F Ext File Attributes   81A40000 (2175008768)\n+1D0FF 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-1CF53 Local Header Offset   00016000 (90112)\n-1CF57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D103 Local Header Offset   00016162 (90466)\n+1D107 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CF57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D107: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CF8D CENTRAL HEADER #92    02014B50 (33639248)\n-1CF91 Created Zip Spec      14 (20) '2.0'\n-1CF92 Created OS            03 (3) 'Unix'\n-1CF93 Extract Zip Spec      14 (20) '2.0'\n-1CF94 Extract OS            00 (0) 'MS-DOS'\n-1CF95 General Purpose Flag  0800 (2048)\n+1D13D CENTRAL HEADER #92    02014B50 (33639248)\n+1D141 Created Zip Spec      14 (20) '2.0'\n+1D142 Created OS            03 (3) 'Unix'\n+1D143 Extract Zip Spec      14 (20) '2.0'\n+1D144 Extract OS            00 (0) 'MS-DOS'\n+1D145 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CF97 Compression Method    0008 (8) 'Deflated'\n-1CF99 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1CF9D CRC                   FC4D9CC7 (4232944839)\n-1CFA1 Compressed Size       00000238 (568)\n-1CFA5 Uncompressed Size     00000409 (1033)\n-1CFA9 Filename Length       0035 (53)\n-1CFAB Extra Length          0000 (0)\n-1CFAD Comment Length        0000 (0)\n-1CFAF Disk Start            0000 (0)\n-1CFB1 Int File Attributes   0000 (0)\n+1D147 Compression Method    0008 (8) 'Deflated'\n+1D149 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D14D CRC                   49F89DC8 (1241030088)\n+1D151 Compressed Size       0000023F (575)\n+1D155 Uncompressed Size     0000041E (1054)\n+1D159 Filename Length       0035 (53)\n+1D15B Extra Length          0000 (0)\n+1D15D Comment Length        0000 (0)\n+1D15F Disk Start            0000 (0)\n+1D161 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1CFB3 Ext File Attributes   81A40000 (2175008768)\n+1D163 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-1CFB7 Local Header Offset   0001651B (91419)\n-1CFBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D167 Local Header Offset   00016689 (91785)\n+1D16B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CFBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D16B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1CFF0 CENTRAL HEADER #93    02014B50 (33639248)\n-1CFF4 Created Zip Spec      14 (20) '2.0'\n-1CFF5 Created OS            03 (3) 'Unix'\n-1CFF6 Extract Zip Spec      14 (20) '2.0'\n-1CFF7 Extract OS            00 (0) 'MS-DOS'\n-1CFF8 General Purpose Flag  0800 (2048)\n+1D1A0 CENTRAL HEADER #93    02014B50 (33639248)\n+1D1A4 Created Zip Spec      14 (20) '2.0'\n+1D1A5 Created OS            03 (3) 'Unix'\n+1D1A6 Extract Zip Spec      14 (20) '2.0'\n+1D1A7 Extract OS            00 (0) 'MS-DOS'\n+1D1A8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CFFA Compression Method    0008 (8) 'Deflated'\n-1CFFC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D000 CRC                   E40DEA4B (3826117195)\n-1D004 Compressed Size       000004B6 (1206)\n-1D008 Uncompressed Size     00000CAE (3246)\n-1D00C Filename Length       0034 (52)\n-1D00E Extra Length          0000 (0)\n-1D010 Comment Length        0000 (0)\n-1D012 Disk Start            0000 (0)\n-1D014 Int File Attributes   0000 (0)\n+1D1AA Compression Method    0008 (8) 'Deflated'\n+1D1AC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D1B0 CRC                   E40DEA4B (3826117195)\n+1D1B4 Compressed Size       000004B6 (1206)\n+1D1B8 Uncompressed Size     00000CAE (3246)\n+1D1BC Filename Length       0034 (52)\n+1D1BE Extra Length          0000 (0)\n+1D1C0 Comment Length        0000 (0)\n+1D1C2 Disk Start            0000 (0)\n+1D1C4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D016 Ext File Attributes   81A40000 (2175008768)\n+1D1C6 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-1D01A Local Header Offset   000167A6 (92070)\n-1D01E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D1CA Local Header Offset   0001691B (92443)\n+1D1CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D01E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D1CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D052 CENTRAL HEADER #94    02014B50 (33639248)\n-1D056 Created Zip Spec      14 (20) '2.0'\n-1D057 Created OS            03 (3) 'Unix'\n-1D058 Extract Zip Spec      14 (20) '2.0'\n-1D059 Extract OS            00 (0) 'MS-DOS'\n-1D05A General Purpose Flag  0800 (2048)\n+1D202 CENTRAL HEADER #94    02014B50 (33639248)\n+1D206 Created Zip Spec      14 (20) '2.0'\n+1D207 Created OS            03 (3) 'Unix'\n+1D208 Extract Zip Spec      14 (20) '2.0'\n+1D209 Extract OS            00 (0) 'MS-DOS'\n+1D20A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D05C Compression Method    0008 (8) 'Deflated'\n-1D05E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D062 CRC                   7B8AE3FF (2072699903)\n-1D066 Compressed Size       00000662 (1634)\n-1D06A Uncompressed Size     000012F0 (4848)\n-1D06E Filename Length       0034 (52)\n-1D070 Extra Length          0000 (0)\n-1D072 Comment Length        0000 (0)\n-1D074 Disk Start            0000 (0)\n-1D076 Int File Attributes   0000 (0)\n+1D20C Compression Method    0008 (8) 'Deflated'\n+1D20E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D212 CRC                   09E32673 (165881459)\n+1D216 Compressed Size       0000066E (1646)\n+1D21A Uncompressed Size     0000136F (4975)\n+1D21E Filename Length       0034 (52)\n+1D220 Extra Length          0000 (0)\n+1D222 Comment Length        0000 (0)\n+1D224 Disk Start            0000 (0)\n+1D226 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D078 Ext File Attributes   81A40000 (2175008768)\n+1D228 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-1D07C Local Header Offset   00016CAE (93358)\n-1D080 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D22C Local Header Offset   00016E23 (93731)\n+1D230 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D080: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D230: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D0B4 CENTRAL HEADER #95    02014B50 (33639248)\n-1D0B8 Created Zip Spec      14 (20) '2.0'\n-1D0B9 Created OS            03 (3) 'Unix'\n-1D0BA Extract Zip Spec      14 (20) '2.0'\n-1D0BB Extract OS            00 (0) 'MS-DOS'\n-1D0BC General Purpose Flag  0800 (2048)\n+1D264 CENTRAL HEADER #95    02014B50 (33639248)\n+1D268 Created Zip Spec      14 (20) '2.0'\n+1D269 Created OS            03 (3) 'Unix'\n+1D26A Extract Zip Spec      14 (20) '2.0'\n+1D26B Extract OS            00 (0) 'MS-DOS'\n+1D26C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D0BE Compression Method    0008 (8) 'Deflated'\n-1D0C0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D0C4 CRC                   19702ABA (426781370)\n-1D0C8 Compressed Size       00000542 (1346)\n-1D0CC Uncompressed Size     00000F11 (3857)\n-1D0D0 Filename Length       0038 (56)\n-1D0D2 Extra Length          0000 (0)\n-1D0D4 Comment Length        0000 (0)\n-1D0D6 Disk Start            0000 (0)\n-1D0D8 Int File Attributes   0000 (0)\n+1D26E Compression Method    0008 (8) 'Deflated'\n+1D270 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D274 CRC                   BE828C08 (3196226568)\n+1D278 Compressed Size       0000054D (1357)\n+1D27C Uncompressed Size     00000F73 (3955)\n+1D280 Filename Length       0038 (56)\n+1D282 Extra Length          0000 (0)\n+1D284 Comment Length        0000 (0)\n+1D286 Disk Start            0000 (0)\n+1D288 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D0DA Ext File Attributes   81A40000 (2175008768)\n+1D28A 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-1D0DE Local Header Offset   00017362 (95074)\n-1D0E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D28E Local Header Offset   000174E3 (95459)\n+1D292 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D0E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D292: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D11A CENTRAL HEADER #96    02014B50 (33639248)\n-1D11E Created Zip Spec      14 (20) '2.0'\n-1D11F Created OS            03 (3) 'Unix'\n-1D120 Extract Zip Spec      14 (20) '2.0'\n-1D121 Extract OS            00 (0) 'MS-DOS'\n-1D122 General Purpose Flag  0800 (2048)\n+1D2CA CENTRAL HEADER #96    02014B50 (33639248)\n+1D2CE Created Zip Spec      14 (20) '2.0'\n+1D2CF Created OS            03 (3) 'Unix'\n+1D2D0 Extract Zip Spec      14 (20) '2.0'\n+1D2D1 Extract OS            00 (0) 'MS-DOS'\n+1D2D2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D124 Compression Method    0008 (8) 'Deflated'\n-1D126 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D12A CRC                   763975AF (1983477167)\n-1D12E Compressed Size       000003C2 (962)\n-1D132 Uncompressed Size     000008BC (2236)\n-1D136 Filename Length       003F (63)\n-1D138 Extra Length          0000 (0)\n-1D13A Comment Length        0000 (0)\n-1D13C Disk Start            0000 (0)\n-1D13E Int File Attributes   0000 (0)\n+1D2D4 Compression Method    0008 (8) 'Deflated'\n+1D2D6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D2DA CRC                   33B08A9A (867207834)\n+1D2DE Compressed Size       000003CA (970)\n+1D2E2 Uncompressed Size     000008F0 (2288)\n+1D2E6 Filename Length       003F (63)\n+1D2E8 Extra Length          0000 (0)\n+1D2EA Comment Length        0000 (0)\n+1D2EC Disk Start            0000 (0)\n+1D2EE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D140 Ext File Attributes   81A40000 (2175008768)\n+1D2F0 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-1D144 Local Header Offset   000178FA (96506)\n-1D148 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D2F4 Local Header Offset   00017A86 (96902)\n+1D2F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D148: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D2F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D187 CENTRAL HEADER #97    02014B50 (33639248)\n-1D18B Created Zip Spec      14 (20) '2.0'\n-1D18C Created OS            03 (3) 'Unix'\n-1D18D Extract Zip Spec      14 (20) '2.0'\n-1D18E Extract OS            00 (0) 'MS-DOS'\n-1D18F General Purpose Flag  0800 (2048)\n+1D337 CENTRAL HEADER #97    02014B50 (33639248)\n+1D33B Created Zip Spec      14 (20) '2.0'\n+1D33C Created OS            03 (3) 'Unix'\n+1D33D Extract Zip Spec      14 (20) '2.0'\n+1D33E Extract OS            00 (0) 'MS-DOS'\n+1D33F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D191 Compression Method    0008 (8) 'Deflated'\n-1D193 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D197 CRC                   776F6B16 (2003790614)\n-1D19B Compressed Size       00000391 (913)\n-1D19F Uncompressed Size     0000084C (2124)\n-1D1A3 Filename Length       0033 (51)\n-1D1A5 Extra Length          0000 (0)\n-1D1A7 Comment Length        0000 (0)\n-1D1A9 Disk Start            0000 (0)\n-1D1AB Int File Attributes   0000 (0)\n+1D341 Compression Method    0008 (8) 'Deflated'\n+1D343 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D347 CRC                   776F6B16 (2003790614)\n+1D34B Compressed Size       00000391 (913)\n+1D34F Uncompressed Size     0000084C (2124)\n+1D353 Filename Length       0033 (51)\n+1D355 Extra Length          0000 (0)\n+1D357 Comment Length        0000 (0)\n+1D359 Disk Start            0000 (0)\n+1D35B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D1AD Ext File Attributes   81A40000 (2175008768)\n+1D35D 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-1D1B1 Local Header Offset   00017D19 (97561)\n-1D1B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D361 Local Header Offset   00017EAD (97965)\n+1D365 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D1B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D365: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D1E8 CENTRAL HEADER #98    02014B50 (33639248)\n-1D1EC Created Zip Spec      14 (20) '2.0'\n-1D1ED Created OS            03 (3) 'Unix'\n-1D1EE Extract Zip Spec      14 (20) '2.0'\n-1D1EF Extract OS            00 (0) 'MS-DOS'\n-1D1F0 General Purpose Flag  0800 (2048)\n+1D398 CENTRAL HEADER #98    02014B50 (33639248)\n+1D39C Created Zip Spec      14 (20) '2.0'\n+1D39D Created OS            03 (3) 'Unix'\n+1D39E Extract Zip Spec      14 (20) '2.0'\n+1D39F Extract OS            00 (0) 'MS-DOS'\n+1D3A0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D1F2 Compression Method    0008 (8) 'Deflated'\n-1D1F4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D1F8 CRC                   A1EB5EED (2716557037)\n-1D1FC Compressed Size       000006D3 (1747)\n-1D200 Uncompressed Size     000016D2 (5842)\n-1D204 Filename Length       003F (63)\n-1D206 Extra Length          0000 (0)\n-1D208 Comment Length        0000 (0)\n-1D20A Disk Start            0000 (0)\n-1D20C Int File Attributes   0000 (0)\n+1D3A2 Compression Method    0008 (8) 'Deflated'\n+1D3A4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D3A8 CRC                   A1EB5EED (2716557037)\n+1D3AC Compressed Size       000006D3 (1747)\n+1D3B0 Uncompressed Size     000016D2 (5842)\n+1D3B4 Filename Length       003F (63)\n+1D3B6 Extra Length          0000 (0)\n+1D3B8 Comment Length        0000 (0)\n+1D3BA Disk Start            0000 (0)\n+1D3BC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D20E Ext File Attributes   81A40000 (2175008768)\n+1D3BE 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-1D212 Local Header Offset   000180FB (98555)\n-1D216 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D3C2 Local Header Offset   0001828F (98959)\n+1D3C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D216: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D3C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D255 CENTRAL HEADER #99    02014B50 (33639248)\n-1D259 Created Zip Spec      14 (20) '2.0'\n-1D25A Created OS            03 (3) 'Unix'\n-1D25B Extract Zip Spec      14 (20) '2.0'\n-1D25C Extract OS            00 (0) 'MS-DOS'\n-1D25D General Purpose Flag  0800 (2048)\n+1D405 CENTRAL HEADER #99    02014B50 (33639248)\n+1D409 Created Zip Spec      14 (20) '2.0'\n+1D40A Created OS            03 (3) 'Unix'\n+1D40B Extract Zip Spec      14 (20) '2.0'\n+1D40C Extract OS            00 (0) 'MS-DOS'\n+1D40D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D25F Compression Method    0008 (8) 'Deflated'\n-1D261 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D265 CRC                   71347931 (1899264305)\n-1D269 Compressed Size       00000939 (2361)\n-1D26D Uncompressed Size     00001EE7 (7911)\n-1D271 Filename Length       002F (47)\n-1D273 Extra Length          0000 (0)\n-1D275 Comment Length        0000 (0)\n-1D277 Disk Start            0000 (0)\n-1D279 Int File Attributes   0000 (0)\n+1D40F Compression Method    0008 (8) 'Deflated'\n+1D411 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D415 CRC                   93BDDA62 (2478692962)\n+1D419 Compressed Size       0000094C (2380)\n+1D41D Uncompressed Size     00002000 (8192)\n+1D421 Filename Length       002F (47)\n+1D423 Extra Length          0000 (0)\n+1D425 Comment Length        0000 (0)\n+1D427 Disk Start            0000 (0)\n+1D429 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D27B Ext File Attributes   81A40000 (2175008768)\n+1D42B 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-1D27F Local Header Offset   0001882B (100395)\n-1D283 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D42F Local Header Offset   000189BF (100799)\n+1D433 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D283: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D433: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D2B2 CENTRAL HEADER #100   02014B50 (33639248)\n-1D2B6 Created Zip Spec      14 (20) '2.0'\n-1D2B7 Created OS            03 (3) 'Unix'\n-1D2B8 Extract Zip Spec      14 (20) '2.0'\n-1D2B9 Extract OS            00 (0) 'MS-DOS'\n-1D2BA General Purpose Flag  0800 (2048)\n+1D462 CENTRAL HEADER #100   02014B50 (33639248)\n+1D466 Created Zip Spec      14 (20) '2.0'\n+1D467 Created OS            03 (3) 'Unix'\n+1D468 Extract Zip Spec      14 (20) '2.0'\n+1D469 Extract OS            00 (0) 'MS-DOS'\n+1D46A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D2BC Compression Method    0008 (8) 'Deflated'\n-1D2BE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D2C2 CRC                   E459791A (3831068954)\n-1D2C6 Compressed Size       00000B02 (2818)\n-1D2CA Uncompressed Size     00002B55 (11093)\n-1D2CE Filename Length       002D (45)\n-1D2D0 Extra Length          0000 (0)\n-1D2D2 Comment Length        0000 (0)\n-1D2D4 Disk Start            0000 (0)\n-1D2D6 Int File Attributes   0000 (0)\n+1D46C Compression Method    0008 (8) 'Deflated'\n+1D46E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D472 CRC                   E459791A (3831068954)\n+1D476 Compressed Size       00000B02 (2818)\n+1D47A Uncompressed Size     00002B55 (11093)\n+1D47E Filename Length       002D (45)\n+1D480 Extra Length          0000 (0)\n+1D482 Comment Length        0000 (0)\n+1D484 Disk Start            0000 (0)\n+1D486 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D2D8 Ext File Attributes   81A40000 (2175008768)\n+1D488 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-1D2DC Local Header Offset   000191B1 (102833)\n-1D2E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D48C Local Header Offset   00019358 (103256)\n+1D490 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D2E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D490: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D30D CENTRAL HEADER #101   02014B50 (33639248)\n-1D311 Created Zip Spec      14 (20) '2.0'\n-1D312 Created OS            03 (3) 'Unix'\n-1D313 Extract Zip Spec      14 (20) '2.0'\n-1D314 Extract OS            00 (0) 'MS-DOS'\n-1D315 General Purpose Flag  0800 (2048)\n+1D4BD CENTRAL HEADER #101   02014B50 (33639248)\n+1D4C1 Created Zip Spec      14 (20) '2.0'\n+1D4C2 Created OS            03 (3) 'Unix'\n+1D4C3 Extract Zip Spec      14 (20) '2.0'\n+1D4C4 Extract OS            00 (0) 'MS-DOS'\n+1D4C5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D317 Compression Method    0008 (8) 'Deflated'\n-1D319 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D31D CRC                   80C30D3D (2160266557)\n-1D321 Compressed Size       000002F8 (760)\n-1D325 Uncompressed Size     0000065E (1630)\n-1D329 Filename Length       002E (46)\n-1D32B Extra Length          0000 (0)\n-1D32D Comment Length        0000 (0)\n-1D32F Disk Start            0000 (0)\n-1D331 Int File Attributes   0000 (0)\n+1D4C7 Compression Method    0008 (8) 'Deflated'\n+1D4C9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D4CD CRC                   80C30D3D (2160266557)\n+1D4D1 Compressed Size       000002F8 (760)\n+1D4D5 Uncompressed Size     0000065E (1630)\n+1D4D9 Filename Length       002E (46)\n+1D4DB Extra Length          0000 (0)\n+1D4DD Comment Length        0000 (0)\n+1D4DF Disk Start            0000 (0)\n+1D4E1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D333 Ext File Attributes   81A40000 (2175008768)\n+1D4E3 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-1D337 Local Header Offset   00019CFE (105726)\n-1D33B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D4E7 Local Header Offset   00019EA5 (106149)\n+1D4EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D33B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D4EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D369 CENTRAL HEADER #102   02014B50 (33639248)\n-1D36D Created Zip Spec      14 (20) '2.0'\n-1D36E Created OS            03 (3) 'Unix'\n-1D36F Extract Zip Spec      14 (20) '2.0'\n-1D370 Extract OS            00 (0) 'MS-DOS'\n-1D371 General Purpose Flag  0800 (2048)\n+1D519 CENTRAL HEADER #102   02014B50 (33639248)\n+1D51D Created Zip Spec      14 (20) '2.0'\n+1D51E Created OS            03 (3) 'Unix'\n+1D51F Extract Zip Spec      14 (20) '2.0'\n+1D520 Extract OS            00 (0) 'MS-DOS'\n+1D521 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D373 Compression Method    0008 (8) 'Deflated'\n-1D375 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D379 CRC                   613BF150 (1631318352)\n-1D37D Compressed Size       0000097B (2427)\n-1D381 Uncompressed Size     00002B36 (11062)\n-1D385 Filename Length       002A (42)\n-1D387 Extra Length          0000 (0)\n-1D389 Comment Length        0000 (0)\n-1D38B Disk Start            0000 (0)\n-1D38D Int File Attributes   0000 (0)\n+1D523 Compression Method    0008 (8) 'Deflated'\n+1D525 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D529 CRC                   8E103737 (2383427383)\n+1D52D Compressed Size       0000098B (2443)\n+1D531 Uncompressed Size     00002C47 (11335)\n+1D535 Filename Length       002A (42)\n+1D537 Extra Length          0000 (0)\n+1D539 Comment Length        0000 (0)\n+1D53B Disk Start            0000 (0)\n+1D53D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D38F Ext File Attributes   81A40000 (2175008768)\n+1D53F 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-1D393 Local Header Offset   0001A042 (106562)\n-1D397 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D543 Local Header Offset   0001A1E9 (106985)\n+1D547 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D397: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D547: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D3C1 CENTRAL HEADER #103   02014B50 (33639248)\n-1D3C5 Created Zip Spec      14 (20) '2.0'\n-1D3C6 Created OS            03 (3) 'Unix'\n-1D3C7 Extract Zip Spec      14 (20) '2.0'\n-1D3C8 Extract OS            00 (0) 'MS-DOS'\n-1D3C9 General Purpose Flag  0800 (2048)\n+1D571 CENTRAL HEADER #103   02014B50 (33639248)\n+1D575 Created Zip Spec      14 (20) '2.0'\n+1D576 Created OS            03 (3) 'Unix'\n+1D577 Extract Zip Spec      14 (20) '2.0'\n+1D578 Extract OS            00 (0) 'MS-DOS'\n+1D579 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D3CB Compression Method    0008 (8) 'Deflated'\n-1D3CD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D3D1 CRC                   2F9D6707 (798844679)\n-1D3D5 Compressed Size       000000D3 (211)\n-1D3D9 Uncompressed Size     00000334 (820)\n-1D3DD Filename Length       0033 (51)\n-1D3DF Extra Length          0000 (0)\n-1D3E1 Comment Length        0000 (0)\n-1D3E3 Disk Start            0000 (0)\n-1D3E5 Int File Attributes   0000 (0)\n+1D57B Compression Method    0008 (8) 'Deflated'\n+1D57D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D581 CRC                   2F9D6707 (798844679)\n+1D585 Compressed Size       000000D3 (211)\n+1D589 Uncompressed Size     00000334 (820)\n+1D58D Filename Length       0033 (51)\n+1D58F Extra Length          0000 (0)\n+1D591 Comment Length        0000 (0)\n+1D593 Disk Start            0000 (0)\n+1D595 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D3E7 Ext File Attributes   81A40000 (2175008768)\n+1D597 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-1D3EB Local Header Offset   0001AA05 (109061)\n-1D3EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D59B Local Header Offset   0001ABBC (109500)\n+1D59F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D3EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D59F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D422 CENTRAL HEADER #104   02014B50 (33639248)\n-1D426 Created Zip Spec      14 (20) '2.0'\n-1D427 Created OS            03 (3) 'Unix'\n-1D428 Extract Zip Spec      14 (20) '2.0'\n-1D429 Extract OS            00 (0) 'MS-DOS'\n-1D42A General Purpose Flag  0800 (2048)\n+1D5D2 CENTRAL HEADER #104   02014B50 (33639248)\n+1D5D6 Created Zip Spec      14 (20) '2.0'\n+1D5D7 Created OS            03 (3) 'Unix'\n+1D5D8 Extract Zip Spec      14 (20) '2.0'\n+1D5D9 Extract OS            00 (0) 'MS-DOS'\n+1D5DA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D42C Compression Method    0008 (8) 'Deflated'\n-1D42E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D432 CRC                   59884A10 (1502104080)\n-1D436 Compressed Size       00000038 (56)\n-1D43A Uncompressed Size     00000042 (66)\n-1D43E Filename Length       003C (60)\n-1D440 Extra Length          0000 (0)\n-1D442 Comment Length        0000 (0)\n-1D444 Disk Start            0000 (0)\n-1D446 Int File Attributes   0000 (0)\n+1D5DC Compression Method    0008 (8) 'Deflated'\n+1D5DE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D5E2 CRC                   59884A10 (1502104080)\n+1D5E6 Compressed Size       00000038 (56)\n+1D5EA Uncompressed Size     00000042 (66)\n+1D5EE Filename Length       003C (60)\n+1D5F0 Extra Length          0000 (0)\n+1D5F2 Comment Length        0000 (0)\n+1D5F4 Disk Start            0000 (0)\n+1D5F6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D448 Ext File Attributes   81A40000 (2175008768)\n+1D5F8 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-1D44C Local Header Offset   0001AB29 (109353)\n-1D450 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D5FC Local Header Offset   0001ACE0 (109792)\n+1D600 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D450: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D600: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D48C CENTRAL HEADER #105   02014B50 (33639248)\n-1D490 Created Zip Spec      14 (20) '2.0'\n-1D491 Created OS            03 (3) 'Unix'\n-1D492 Extract Zip Spec      14 (20) '2.0'\n-1D493 Extract OS            00 (0) 'MS-DOS'\n-1D494 General Purpose Flag  0800 (2048)\n+1D63C CENTRAL HEADER #105   02014B50 (33639248)\n+1D640 Created Zip Spec      14 (20) '2.0'\n+1D641 Created OS            03 (3) 'Unix'\n+1D642 Extract Zip Spec      14 (20) '2.0'\n+1D643 Extract OS            00 (0) 'MS-DOS'\n+1D644 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D496 Compression Method    0008 (8) 'Deflated'\n-1D498 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D49C CRC                   A08C1C8C (2693536908)\n-1D4A0 Compressed Size       00000056 (86)\n-1D4A4 Uncompressed Size     000000AA (170)\n-1D4A8 Filename Length       0035 (53)\n-1D4AA Extra Length          0000 (0)\n-1D4AC Comment Length        0000 (0)\n-1D4AE Disk Start            0000 (0)\n-1D4B0 Int File Attributes   0000 (0)\n+1D646 Compression Method    0008 (8) 'Deflated'\n+1D648 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D64C CRC                   A08C1C8C (2693536908)\n+1D650 Compressed Size       00000056 (86)\n+1D654 Uncompressed Size     000000AA (170)\n+1D658 Filename Length       0035 (53)\n+1D65A Extra Length          0000 (0)\n+1D65C Comment Length        0000 (0)\n+1D65E Disk Start            0000 (0)\n+1D660 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D4B2 Ext File Attributes   81A40000 (2175008768)\n+1D662 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-1D4B6 Local Header Offset   0001ABBB (109499)\n-1D4BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D666 Local Header Offset   0001AD72 (109938)\n+1D66A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D4BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D66A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D4EF CENTRAL HEADER #106   02014B50 (33639248)\n-1D4F3 Created Zip Spec      14 (20) '2.0'\n-1D4F4 Created OS            03 (3) 'Unix'\n-1D4F5 Extract Zip Spec      14 (20) '2.0'\n-1D4F6 Extract OS            00 (0) 'MS-DOS'\n-1D4F7 General Purpose Flag  0800 (2048)\n+1D69F CENTRAL HEADER #106   02014B50 (33639248)\n+1D6A3 Created Zip Spec      14 (20) '2.0'\n+1D6A4 Created OS            03 (3) 'Unix'\n+1D6A5 Extract Zip Spec      14 (20) '2.0'\n+1D6A6 Extract OS            00 (0) 'MS-DOS'\n+1D6A7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D4F9 Compression Method    0008 (8) 'Deflated'\n-1D4FB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D4FF CRC                   B40DDFAC (3020808108)\n-1D503 Compressed Size       0000005D (93)\n-1D507 Uncompressed Size     000000B9 (185)\n-1D50B Filename Length       0039 (57)\n-1D50D Extra Length          0000 (0)\n-1D50F Comment Length        0000 (0)\n-1D511 Disk Start            0000 (0)\n-1D513 Int File Attributes   0000 (0)\n+1D6A9 Compression Method    0008 (8) 'Deflated'\n+1D6AB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D6AF CRC                   B40DDFAC (3020808108)\n+1D6B3 Compressed Size       0000005D (93)\n+1D6B7 Uncompressed Size     000000B9 (185)\n+1D6BB Filename Length       0039 (57)\n+1D6BD Extra Length          0000 (0)\n+1D6BF Comment Length        0000 (0)\n+1D6C1 Disk Start            0000 (0)\n+1D6C3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D515 Ext File Attributes   81A40000 (2175008768)\n+1D6C5 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-1D519 Local Header Offset   0001AC64 (109668)\n-1D51D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D6C9 Local Header Offset   0001AE1B (110107)\n+1D6CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D51D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D6CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D556 CENTRAL HEADER #107   02014B50 (33639248)\n-1D55A Created Zip Spec      14 (20) '2.0'\n-1D55B Created OS            03 (3) 'Unix'\n-1D55C Extract Zip Spec      14 (20) '2.0'\n-1D55D Extract OS            00 (0) 'MS-DOS'\n-1D55E General Purpose Flag  0800 (2048)\n+1D706 CENTRAL HEADER #107   02014B50 (33639248)\n+1D70A Created Zip Spec      14 (20) '2.0'\n+1D70B Created OS            03 (3) 'Unix'\n+1D70C Extract Zip Spec      14 (20) '2.0'\n+1D70D Extract OS            00 (0) 'MS-DOS'\n+1D70E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D560 Compression Method    0008 (8) 'Deflated'\n-1D562 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D566 CRC                   0FC7AABB (264743611)\n-1D56A Compressed Size       0000039A (922)\n-1D56E Uncompressed Size     000009B0 (2480)\n-1D572 Filename Length       0035 (53)\n-1D574 Extra Length          0000 (0)\n-1D576 Comment Length        0000 (0)\n-1D578 Disk Start            0000 (0)\n-1D57A Int File Attributes   0000 (0)\n+1D710 Compression Method    0008 (8) 'Deflated'\n+1D712 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D716 CRC                   A1CBD481 (2714489985)\n+1D71A Compressed Size       00000393 (915)\n+1D71E Uncompressed Size     00000971 (2417)\n+1D722 Filename Length       0035 (53)\n+1D724 Extra Length          0000 (0)\n+1D726 Comment Length        0000 (0)\n+1D728 Disk Start            0000 (0)\n+1D72A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D57C Ext File Attributes   81A40000 (2175008768)\n+1D72C 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-1D580 Local Header Offset   0001AD18 (109848)\n-1D584 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D730 Local Header Offset   0001AECF (110287)\n+1D734 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D584: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D734: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D5B9 CENTRAL HEADER #108   02014B50 (33639248)\n-1D5BD Created Zip Spec      14 (20) '2.0'\n-1D5BE Created OS            03 (3) 'Unix'\n-1D5BF Extract Zip Spec      14 (20) '2.0'\n-1D5C0 Extract OS            00 (0) 'MS-DOS'\n-1D5C1 General Purpose Flag  0800 (2048)\n+1D769 CENTRAL HEADER #108   02014B50 (33639248)\n+1D76D Created Zip Spec      14 (20) '2.0'\n+1D76E Created OS            03 (3) 'Unix'\n+1D76F Extract Zip Spec      14 (20) '2.0'\n+1D770 Extract OS            00 (0) 'MS-DOS'\n+1D771 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D5C3 Compression Method    0008 (8) 'Deflated'\n-1D5C5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1D5C9 CRC                   5F285EB1 (1596481201)\n-1D5CD Compressed Size       00000042 (66)\n-1D5D1 Uncompressed Size     00000044 (68)\n-1D5D5 Filename Length       003C (60)\n-1D5D7 Extra Length          0000 (0)\n-1D5D9 Comment Length        0000 (0)\n-1D5DB Disk Start            0000 (0)\n-1D5DD Int File Attributes   0000 (0)\n+1D773 Compression Method    0008 (8) 'Deflated'\n+1D775 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1D779 CRC                   5F285EB1 (1596481201)\n+1D77D Compressed Size       00000042 (66)\n+1D781 Uncompressed Size     00000044 (68)\n+1D785 Filename Length       003C (60)\n+1D787 Extra Length          0000 (0)\n+1D789 Comment Length        0000 (0)\n+1D78B Disk Start            0000 (0)\n+1D78D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1D5DF Ext File Attributes   81A40000 (2175008768)\n+1D78F 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-1D5E3 Local Header Offset   0001B105 (110853)\n-1D5E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D793 Local Header Offset   0001B2B5 (111285)\n+1D797 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D5E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D797: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1D623 END CENTRAL HEADER    06054B50 (101010256)\n-1D627 Number of this disk   0000 (0)\n-1D629 Central Dir Disk no   0000 (0)\n-1D62B Entries in this disk  006C (108)\n-1D62D Total Entries         006C (108)\n-1D62F Size of Central Dir   00002482 (9346)\n-1D633 Offset to Central Dir 0001B1A1 (111009)\n-1D637 Comment Length        0000 (0)\n+1D7D3 END CENTRAL HEADER    06054B50 (101010256)\n+1D7D7 Number of this disk   0000 (0)\n+1D7D9 Central Dir Disk no   0000 (0)\n+1D7DB Entries in this disk  006C (108)\n+1D7DD Total Entries         006C (108)\n+1D7DF Size of Central Dir   00002482 (9346)\n+1D7E3 Offset to Central Dir 0001B351 (111441)\n+1D7E7 Comment Length        0000 (0)\n #\n # Error Count: 25\n # Warning Count: 241\n #\n # Done\n"}, {"source1": "com/alibaba/dubbo/rpc/service/GenericException.java", "source2": "com/alibaba/dubbo/rpc/service/GenericException.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,62 +1,62 @@\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-\n-package com.alibaba.dubbo.rpc.service;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-@Deprecated\n-public class GenericException extends RuntimeException {\n-\n-    private static final long serialVersionUID = -1182299763306599962L;\n-\n-    private String exceptionClass;\n-\n-    private String exceptionMessage;\n-\n-    public GenericException() {\n-    }\n-\n-    public GenericException(String exceptionClass, String exceptionMessage) {\n-        super(exceptionMessage);\n-        this.exceptionClass = exceptionClass;\n-        this.exceptionMessage = exceptionMessage;\n-    }\n-\n-    public GenericException(Throwable cause) {\n-        super(StringUtils.toString(cause));\n-        this.exceptionClass = cause.getClass().getName();\n-        this.exceptionMessage = cause.getMessage();\n-    }\n-\n-    public String getExceptionClass() {\n-        return exceptionClass;\n-    }\n-\n-    public void setExceptionClass(String exceptionClass) {\n-        this.exceptionClass = exceptionClass;\n-    }\n-\n-    public String getExceptionMessage() {\n-        return exceptionMessage;\n-    }\n-\n-    public void setExceptionMessage(String exceptionMessage) {\n-        this.exceptionMessage = exceptionMessage;\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+\r\n+package com.alibaba.dubbo.rpc.service;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+@Deprecated\r\n+public class GenericException extends RuntimeException {\r\n+\r\n+    private static final long serialVersionUID = -1182299763306599962L;\r\n+\r\n+    private String exceptionClass;\r\n+\r\n+    private String exceptionMessage;\r\n+\r\n+    public GenericException() {\r\n+    }\r\n+\r\n+    public GenericException(String exceptionClass, String exceptionMessage) {\r\n+        super(exceptionMessage);\r\n+        this.exceptionClass = exceptionClass;\r\n+        this.exceptionMessage = exceptionMessage;\r\n+    }\r\n+\r\n+    public GenericException(Throwable cause) {\r\n+        super(StringUtils.toString(cause));\r\n+        this.exceptionClass = cause.getClass().getName();\r\n+        this.exceptionMessage = cause.getMessage();\r\n+    }\r\n+\r\n+    public String getExceptionClass() {\r\n+        return exceptionClass;\r\n+    }\r\n+\r\n+    public void setExceptionClass(String exceptionClass) {\r\n+        this.exceptionClass = exceptionClass;\r\n+    }\r\n+\r\n+    public String getExceptionMessage() {\r\n+        return exceptionMessage;\r\n+    }\r\n+\r\n+    public void setExceptionMessage(String exceptionMessage) {\r\n+        this.exceptionMessage = exceptionMessage;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/AppResponse.java", "source2": "org/apache/dubbo/rpc/AppResponse.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,255 +1,255 @@\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;\n-\n-\n-import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-import java.util.function.BiConsumer;\n-import java.util.function.Function;\n-\n-import static org.apache.dubbo.rpc.Constants.INVOCATION_KEY;\n-\n-/**\n- * {@link AsyncRpcResult} is introduced in 3.0.0 to replace RpcResult, and RpcResult is replaced with {@link AppResponse}:\n- * <ul>\n- *     <li>AsyncRpcResult is the object that is actually passed in the call chain</li>\n- *     <li>AppResponse only simply represents the business result</li>\n- * </ul>\n- * <p>\n- *  The relationship between them can be described as follow, an abstraction of the definition of AsyncRpcResult:\n- *  <pre>\n- *  {@code\n- *   Public class AsyncRpcResult implements CompletionStage<AppResponse> {\n- *       ......\n- *  }\n- * </pre>\n- * AsyncRpcResult is a future representing an unfinished RPC call, while AppResponse is the actual return type of this call.\n- * In theory, AppResponse doesn't have to implement the {@link Result} interface, this is done mainly for compatibility purpose.\n- *\n- * @serial Do not change the class name and properties.\n- */\n-public class AppResponse implements Result {\n-\n-    private static final long serialVersionUID = -6925924956850004727L;\n-\n-    private Object result;\n-\n-    private Throwable exception;\n-\n-    private Map<String, Object> attachments = new HashMap<>();\n-\n-    private Map<String, Object> attributes = new HashMap<>();\n-\n-    public AppResponse() {\n-    }\n-\n-    public AppResponse(Invocation invocation) {\n-        this.setAttribute(INVOCATION_KEY, invocation);\n-    }\n-\n-    public AppResponse(Object result) {\n-        this.result = result;\n-    }\n-\n-    public AppResponse(Throwable exception) {\n-        this.exception = exception;\n-    }\n-\n-    @Override\n-    public Object recreate() throws Throwable {\n-        if (exception != null) {\n-            // fix issue#619\n-            try {\n-                Object stackTrace = InvokerInvocationHandler.stackTraceField.get(exception);\n-                if (stackTrace == null) {\n-                    exception.setStackTrace(new StackTraceElement[0]);\n-                }\n-            } catch (Exception e) {\n-                // ignore\n-            }\n-            throw exception;\n-        }\n-        return result;\n-    }\n-\n-    @Override\n-    public Object getValue() {\n-        return result;\n-    }\n-\n-    @Override\n-    public void setValue(Object value) {\n-        this.result = value;\n-    }\n-\n-    @Override\n-    public Throwable getException() {\n-        return exception;\n-    }\n-\n-    @Override\n-    public void setException(Throwable e) {\n-        this.exception = e;\n-    }\n-\n-    @Override\n-    public boolean hasException() {\n-        return exception != null;\n-    }\n-\n-    @Override\n-    @Deprecated\n-    public Map<String, String> getAttachments() {\n-        return new AttachmentsAdapter.ObjectToStringMap(attachments);\n-    }\n-\n-    @Override\n-    public Map<String, Object> getObjectAttachments() {\n-        return attachments;\n-    }\n-\n-    /**\n-     * Append all items from the map into the attachment, if map is empty then nothing happens\n-     *\n-     * @param map contains all key-value pairs to append\n-     */\n-    public void setAttachments(Map<String, String> map) {\n-        this.attachments = map == null ? new HashMap<>() : new HashMap<>(map);\n-    }\n-\n-    @Override\n-    public void setObjectAttachments(Map<String, Object> map) {\n-        this.attachments = map == null ? new HashMap<>() : map;\n-    }\n-\n-    public void addAttachments(Map<String, String> map) {\n-        if (map == null) {\n-            return;\n-        }\n-        if (this.attachments == null) {\n-            this.attachments = new HashMap<>();\n-        }\n-        this.attachments.putAll(map);\n-    }\n-\n-    @Override\n-    public void addObjectAttachments(Map<String, Object> map) {\n-        if (map == null) {\n-            return;\n-        }\n-        if (this.attachments == null) {\n-            this.attachments = new HashMap<>();\n-        }\n-        this.attachments.putAll(map);\n-    }\n-\n-    @Override\n-    public String getAttachment(String key) {\n-        Object value = attachments.get(key);\n-        if (value instanceof String) {\n-            return (String) value;\n-        }\n-        return null;\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key) {\n-        return attachments.get(key);\n-    }\n-\n-    @Override\n-    public String getAttachment(String key, String defaultValue) {\n-        Object result = attachments.get(key);\n-        if (result == null) {\n-            return defaultValue;\n-        }\n-        if (result instanceof String) {\n-            return (String) result;\n-        }\n-        return defaultValue;\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key, Object defaultValue) {\n-        Object result = attachments.get(key);\n-        if (result == null) {\n-            result = defaultValue;\n-        }\n-        return result;\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, String value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, Object value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setObjectAttachment(String key, Object value) {\n-        attachments.put(key, value);\n-    }\n-\n-    public Object getAttribute(String key) {\n-        return attributes.get(key);\n-    }\n-\n-    public void setAttribute(String key, Object value) {\n-        attributes.put(key, value);\n-    }\n-\n-    @Override\n-    public Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn) {\n-        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\n-    }\n-\n-    @Override\n-    public <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn) {\n-        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\n-    }\n-\n-    @Override\n-    public Result get() throws InterruptedException, ExecutionException {\n-        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\n-    }\n-\n-    @Override\n-    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\n-        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\n-    }\n-\n-    public void clear() {\n-        this.result = null;\n-        this.exception = null;\n-        this.attachments.clear();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"AppResponse [value=\" + result + \", exception=\" + 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;\r\n+\r\n+\r\n+import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+import java.util.function.BiConsumer;\r\n+import java.util.function.Function;\r\n+\r\n+import static org.apache.dubbo.rpc.Constants.INVOCATION_KEY;\r\n+\r\n+/**\r\n+ * {@link AsyncRpcResult} is introduced in 3.0.0 to replace RpcResult, and RpcResult is replaced with {@link AppResponse}:\r\n+ * <ul>\r\n+ *     <li>AsyncRpcResult is the object that is actually passed in the call chain</li>\r\n+ *     <li>AppResponse only simply represents the business result</li>\r\n+ * </ul>\r\n+ * <p>\r\n+ *  The relationship between them can be described as follow, an abstraction of the definition of AsyncRpcResult:\r\n+ *  <pre>\r\n+ *  {@code\r\n+ *   Public class AsyncRpcResult implements CompletionStage<AppResponse> {\r\n+ *       ......\r\n+ *  }\r\n+ * </pre>\r\n+ * AsyncRpcResult is a future representing an unfinished RPC call, while AppResponse is the actual return type of this call.\r\n+ * In theory, AppResponse doesn't have to implement the {@link Result} interface, this is done mainly for compatibility purpose.\r\n+ *\r\n+ * @serial Do not change the class name and properties.\r\n+ */\r\n+public class AppResponse implements Result {\r\n+\r\n+    private static final long serialVersionUID = -6925924956850004727L;\r\n+\r\n+    private Object result;\r\n+\r\n+    private Throwable exception;\r\n+\r\n+    private Map<String, Object> attachments = new HashMap<>();\r\n+\r\n+    private Map<String, Object> attributes = new HashMap<>();\r\n+\r\n+    public AppResponse() {\r\n+    }\r\n+\r\n+    public AppResponse(Invocation invocation) {\r\n+        this.setAttribute(INVOCATION_KEY, invocation);\r\n+    }\r\n+\r\n+    public AppResponse(Object result) {\r\n+        this.result = result;\r\n+    }\r\n+\r\n+    public AppResponse(Throwable exception) {\r\n+        this.exception = exception;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object recreate() throws Throwable {\r\n+        if (exception != null) {\r\n+            // fix issue#619\r\n+            try {\r\n+                Object stackTrace = InvokerInvocationHandler.stackTraceField.get(exception);\r\n+                if (stackTrace == null) {\r\n+                    exception.setStackTrace(new StackTraceElement[0]);\r\n+                }\r\n+            } catch (Exception e) {\r\n+                // ignore\r\n+            }\r\n+            throw exception;\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getValue() {\r\n+        return result;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setValue(Object value) {\r\n+        this.result = value;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Throwable getException() {\r\n+        return exception;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setException(Throwable e) {\r\n+        this.exception = e;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean hasException() {\r\n+        return exception != null;\r\n+    }\r\n+\r\n+    @Override\r\n+    @Deprecated\r\n+    public Map<String, String> getAttachments() {\r\n+        return new AttachmentsAdapter.ObjectToStringMap(attachments);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<String, Object> getObjectAttachments() {\r\n+        return attachments;\r\n+    }\r\n+\r\n+    /**\r\n+     * Append all items from the map into the attachment, if map is empty then nothing happens\r\n+     *\r\n+     * @param map contains all key-value pairs to append\r\n+     */\r\n+    public void setAttachments(Map<String, String> map) {\r\n+        this.attachments = map == null ? new HashMap<>() : new HashMap<>(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachments(Map<String, Object> map) {\r\n+        this.attachments = map == null ? new HashMap<>() : map;\r\n+    }\r\n+\r\n+    public void addAttachments(Map<String, String> map) {\r\n+        if (map == null) {\r\n+            return;\r\n+        }\r\n+        if (this.attachments == null) {\r\n+            this.attachments = new HashMap<>();\r\n+        }\r\n+        this.attachments.putAll(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addObjectAttachments(Map<String, Object> map) {\r\n+        if (map == null) {\r\n+            return;\r\n+        }\r\n+        if (this.attachments == null) {\r\n+            this.attachments = new HashMap<>();\r\n+        }\r\n+        this.attachments.putAll(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttachment(String key) {\r\n+        Object value = attachments.get(key);\r\n+        if (value instanceof String) {\r\n+            return (String) value;\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key) {\r\n+        return attachments.get(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttachment(String key, String defaultValue) {\r\n+        Object result = attachments.get(key);\r\n+        if (result == null) {\r\n+            return defaultValue;\r\n+        }\r\n+        if (result instanceof String) {\r\n+            return (String) result;\r\n+        }\r\n+        return defaultValue;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key, Object defaultValue) {\r\n+        Object result = attachments.get(key);\r\n+        if (result == null) {\r\n+            result = defaultValue;\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, String value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, Object value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachment(String key, Object value) {\r\n+        attachments.put(key, value);\r\n+    }\r\n+\r\n+    public Object getAttribute(String key) {\r\n+        return attributes.get(key);\r\n+    }\r\n+\r\n+    public void setAttribute(String key, Object value) {\r\n+        attributes.put(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn) {\r\n+        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\r\n+    }\r\n+\r\n+    @Override\r\n+    public <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn) {\r\n+        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result get() throws InterruptedException, ExecutionException {\r\n+        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r\n+        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\r\n+    }\r\n+\r\n+    public void clear() {\r\n+        this.result = null;\r\n+        this.exception = null;\r\n+        this.attachments.clear();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"AppResponse [value=\" + result + \", exception=\" + exception + \"]\";\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/AsyncContextImpl.java", "source2": "org/apache/dubbo/rpc/AsyncContextImpl.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,78 +1,78 @@\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;\n-\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-public class AsyncContextImpl implements AsyncContext {\n-\n-    private final AtomicBoolean started = new AtomicBoolean(false);\n-    private final AtomicBoolean stopped = new AtomicBoolean(false);\n-\n-    private CompletableFuture<Object> future;\n-\n-    private RpcContext storedContext;\n-    private RpcContext storedServerContext;\n-\n-    public AsyncContextImpl() {\n-        this.storedContext = RpcContext.getContext();\n-        this.storedServerContext = RpcContext.getServerContext();\n-    }\n-\n-    @Override\n-    public void write(Object value) {\n-        if (isAsyncStarted() && stop()) {\n-            if (value instanceof Throwable) {\n-                Throwable bizExe = (Throwable) value;\n-                future.completeExceptionally(bizExe);\n-            } else {\n-                future.complete(value);\n-            }\n-        } else {\n-            throw new IllegalStateException(\"The async response has probably been wrote back by another thread, or the asyncContext has been closed.\");\n-        }\n-    }\n-\n-    @Override\n-    public boolean isAsyncStarted() {\n-        return started.get();\n-    }\n-\n-    @Override\n-    public boolean stop() {\n-        return stopped.compareAndSet(false, true);\n-    }\n-\n-    @Override\n-    public void start() {\n-        if (this.started.compareAndSet(false, true)) {\n-            this.future = new CompletableFuture<>();\n-        }\n-    }\n-\n-    @Override\n-    public void signalContextSwitch() {\n-        RpcContext.restoreContext(storedContext);\n-        RpcContext.restoreServerContext(storedServerContext);\n-        // Restore any other contexts in here if necessary.\n-    }\n-\n-    public CompletableFuture<Object> getInternalFuture() {\n-        return future;\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;\r\n+\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+public class AsyncContextImpl implements AsyncContext {\r\n+\r\n+    private final AtomicBoolean started = new AtomicBoolean(false);\r\n+    private final AtomicBoolean stopped = new AtomicBoolean(false);\r\n+\r\n+    private CompletableFuture<Object> future;\r\n+\r\n+    private RpcContext storedContext;\r\n+    private RpcContext storedServerContext;\r\n+\r\n+    public AsyncContextImpl() {\r\n+        this.storedContext = RpcContext.getContext();\r\n+        this.storedServerContext = RpcContext.getServerContext();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(Object value) {\r\n+        if (isAsyncStarted() && stop()) {\r\n+            if (value instanceof Throwable) {\r\n+                Throwable bizExe = (Throwable) value;\r\n+                future.completeExceptionally(bizExe);\r\n+            } else {\r\n+                future.complete(value);\r\n+            }\r\n+        } else {\r\n+            throw new IllegalStateException(\"The async response has probably been wrote back by another thread, or the asyncContext has been closed.\");\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAsyncStarted() {\r\n+        return started.get();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean stop() {\r\n+        return stopped.compareAndSet(false, true);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void start() {\r\n+        if (this.started.compareAndSet(false, true)) {\r\n+            this.future = new CompletableFuture<>();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void signalContextSwitch() {\r\n+        RpcContext.restoreContext(storedContext);\r\n+        RpcContext.restoreServerContext(storedServerContext);\r\n+        // Restore any other contexts in here if necessary.\r\n+    }\r\n+\r\n+    public CompletableFuture<Object> getInternalFuture() {\r\n+        return future;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/AsyncRpcResult.java", "source2": "org/apache/dubbo/rpc/AsyncRpcResult.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,337 +1,337 @@\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;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.threadpool.ThreadlessExecutor;\n-import org.apache.dubbo.rpc.model.ConsumerMethodModel;\n-\n-import java.util.Map;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.Executor;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-import java.util.function.BiConsumer;\n-import java.util.function.Function;\n-\n-import static org.apache.dubbo.common.utils.ReflectUtils.defaultReturn;\n-\n-/**\n- * This class represents an unfinished RPC call, it will hold some context information for this call, for example RpcContext and Invocation,\n- * so that when the call finishes and the result returns, it can guarantee all the contexts being recovered as the same as when the call was made\n- * before any callback is invoked.\n- * <p>\n- * TODO if it's reasonable or even right to keep a reference to Invocation?\n- * <p>\n- * As {@link Result} implements CompletionStage, {@link AsyncRpcResult} allows you to easily build a async filter chain whose status will be\n- * driven entirely by the state of the underlying RPC call.\n- * <p>\n- * AsyncRpcResult does not contain any concrete value (except the underlying value bring by CompletableFuture), consider it as a status transfer node.\n- * {@link #getValue()} and {@link #getException()} are all inherited from {@link Result} interface, implementing them are mainly\n- * for compatibility consideration. Because many legacy {@link Filter} implementation are most possibly to call getValue directly.\n- */\n-public class AsyncRpcResult implements Result {\n-    private static final Logger logger = LoggerFactory.getLogger(AsyncRpcResult.class);\n-\n-    /**\n-     * RpcContext may already have been changed when callback happens, it happens when the same thread is used to execute another RPC call.\n-     * So we should keep the reference of current RpcContext instance and restore it before callback being executed.\n-     */\n-    private RpcContext storedContext;\n-    private RpcContext storedServerContext;\n-    private Executor executor;\n-\n-    private Invocation invocation;\n-\n-    private CompletableFuture<AppResponse> responseFuture;\n-\n-    public AsyncRpcResult(CompletableFuture<AppResponse> future, Invocation invocation) {\n-        this.responseFuture = future;\n-        this.invocation = invocation;\n-        this.storedContext = RpcContext.getContext();\n-        this.storedServerContext = RpcContext.getServerContext();\n-    }\n-\n-    /**\n-     * Notice the return type of {@link #getValue} is the actual type of the RPC method, not {@link AppResponse}\n-     *\n-     * @return\n-     */\n-    @Override\n-    public Object getValue() {\n-        return getAppResponse().getValue();\n-    }\n-\n-    /**\n-     * CompletableFuture can only be completed once, so try to update the result of one completed CompletableFuture will\n-     * has no effect. To avoid this problem, we check the complete status of this future before update it's value.\n-     *\n-     * But notice that trying to give an uncompleted CompletableFuture a new specified value may face a race condition,\n-     * because the background thread watching the real result will also change the status of this CompletableFuture.\n-     * The result is you may lose the value you expected to set.\n-     *\n-     * @param value\n-     */\n-    @Override\n-    public void setValue(Object value) {\n-        try {\n-            if (responseFuture.isDone()) {\n-                responseFuture.get().setValue(value);\n-            } else {\n-                AppResponse appResponse = new AppResponse(invocation);\n-                appResponse.setValue(value);\n-                responseFuture.complete(appResponse);\n-            }\n-        } catch (Exception e) {\n-            // This should not happen in normal request process;\n-            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\n-            throw new RpcException(e);\n-        }\n-    }\n-\n-    @Override\n-    public Throwable getException() {\n-        return getAppResponse().getException();\n-    }\n-\n-    @Override\n-    public void setException(Throwable t) {\n-        try {\n-            if (responseFuture.isDone()) {\n-                responseFuture.get().setException(t);\n-            } else {\n-                AppResponse appResponse = new AppResponse(invocation);\n-                appResponse.setException(t);\n-                responseFuture.complete(appResponse);\n-            }\n-        } catch (Exception e) {\n-            // This should not happen in normal request process;\n-            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\n-            throw new RpcException(e);\n-        }\n-    }\n-\n-    @Override\n-    public boolean hasException() {\n-        return getAppResponse().hasException();\n-    }\n-\n-    public CompletableFuture<AppResponse> getResponseFuture() {\n-        return responseFuture;\n-    }\n-\n-    public void setResponseFuture(CompletableFuture<AppResponse> responseFuture) {\n-        this.responseFuture = responseFuture;\n-    }\n-\n-    public Result getAppResponse() {\n-        try {\n-            if (responseFuture.isDone()) {\n-                return responseFuture.get();\n-            }\n-        } catch (Exception e) {\n-            // This should not happen in normal request process;\n-            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\n-            throw new RpcException(e);\n-        }\n-\n-        return createDefaultValue(invocation);\n-    }\n-\n-    /**\n-     * This method will always return after a maximum 'timeout' waiting:\n-     * 1. if value returns before timeout, return normally.\n-     * 2. if no value returns after timeout, throw TimeoutException.\n-     *\n-     * @return\n-     * @throws InterruptedException\n-     * @throws ExecutionException\n-     */\n-    @Override\n-    public Result get() throws InterruptedException, ExecutionException {\n-        if (executor != null && executor instanceof ThreadlessExecutor) {\n-            ThreadlessExecutor threadlessExecutor = (ThreadlessExecutor) executor;\n-            threadlessExecutor.waitAndDrain();\n-        }\n-        return responseFuture.get();\n-    }\n-\n-    @Override\n-    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\n-        if (executor != null && executor instanceof ThreadlessExecutor) {\n-            ThreadlessExecutor threadlessExecutor = (ThreadlessExecutor) executor;\n-            threadlessExecutor.waitAndDrain();\n-        }\n-        return responseFuture.get(timeout, unit);\n-    }\n-\n-    @Override\n-    public Object recreate() throws Throwable {\n-        RpcInvocation rpcInvocation = (RpcInvocation) invocation;\n-        if (InvokeMode.FUTURE == rpcInvocation.getInvokeMode()) {\n-            return RpcContext.getContext().getFuture();\n-        }\n-\n-        return getAppResponse().recreate();\n-    }\n-\n-    public Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn) {\n-        this.responseFuture = this.responseFuture.whenComplete((v, t) -> {\n-            beforeContext.accept(v, t);\n-            fn.accept(v, t);\n-            afterContext.accept(v, t);\n-        });\n-        return this;\n-    }\n-\n-    @Override\n-    public <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn) {\n-        return this.responseFuture.thenApply(fn);\n-    }\n-\n-    @Override\n-    @Deprecated\n-    public Map<String, String> getAttachments() {\n-        return getAppResponse().getAttachments();\n-    }\n-\n-    @Override\n-    public Map<String, Object> getObjectAttachments() {\n-        return getAppResponse().getObjectAttachments();\n-    }\n-\n-    @Override\n-    public void setAttachments(Map<String, String> map) {\n-        getAppResponse().setAttachments(map);\n-    }\n-\n-    @Override\n-    public void setObjectAttachments(Map<String, Object> map) {\n-        getAppResponse().setObjectAttachments(map);\n-    }\n-\n-    @Deprecated\n-    @Override\n-    public void addAttachments(Map<String, String> map) {\n-        getAppResponse().addAttachments(map);\n-    }\n-\n-    @Override\n-    public void addObjectAttachments(Map<String, Object> map) {\n-        getAppResponse().addObjectAttachments(map);\n-    }\n-\n-    @Override\n-    public String getAttachment(String key) {\n-        return getAppResponse().getAttachment(key);\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key) {\n-        return getAppResponse().getObjectAttachment(key);\n-    }\n-\n-    @Override\n-    public String getAttachment(String key, String defaultValue) {\n-        return getAppResponse().getAttachment(key, defaultValue);\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key, Object defaultValue) {\n-        return getAppResponse().getObjectAttachment(key, defaultValue);\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, String value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, Object value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setObjectAttachment(String key, Object value) {\n-        getAppResponse().setAttachment(key, value);\n-    }\n-\n-    public Executor getExecutor() {\n-        return executor;\n-    }\n-\n-    public void setExecutor(Executor executor) {\n-        this.executor = executor;\n-    }\n-\n-    /**\n-     * tmp context to use when the thread switch to Dubbo thread.\n-     */\n-    private RpcContext tmpContext;\n-\n-    private RpcContext tmpServerContext;\n-    private BiConsumer<Result, Throwable> beforeContext = (appResponse, t) -> {\n-        tmpContext = RpcContext.getContext();\n-        tmpServerContext = RpcContext.getServerContext();\n-        RpcContext.restoreContext(storedContext);\n-        RpcContext.restoreServerContext(storedServerContext);\n-    };\n-\n-    private BiConsumer<Result, Throwable> afterContext = (appResponse, t) -> {\n-        RpcContext.restoreContext(tmpContext);\n-        RpcContext.restoreServerContext(tmpServerContext);\n-    };\n-\n-    /**\n-     * Some utility methods used to quickly generate default AsyncRpcResult instance.\n-     */\n-    public static AsyncRpcResult newDefaultAsyncResult(AppResponse appResponse, Invocation invocation) {\n-        return new AsyncRpcResult(CompletableFuture.completedFuture(appResponse), invocation);\n-    }\n-\n-    public static AsyncRpcResult newDefaultAsyncResult(Invocation invocation) {\n-        return newDefaultAsyncResult(null, null, invocation);\n-    }\n-\n-    public static AsyncRpcResult newDefaultAsyncResult(Object value, Invocation invocation) {\n-        return newDefaultAsyncResult(value, null, invocation);\n-    }\n-\n-    public static AsyncRpcResult newDefaultAsyncResult(Throwable t, Invocation invocation) {\n-        return newDefaultAsyncResult(null, t, invocation);\n-    }\n-\n-    public static AsyncRpcResult newDefaultAsyncResult(Object value, Throwable t, Invocation invocation) {\n-        CompletableFuture<AppResponse> future = new CompletableFuture<>();\n-        AppResponse result = new AppResponse(invocation);\n-        if (t != null) {\n-            result.setException(t);\n-        } else {\n-            result.setValue(value);\n-        }\n-        future.complete(result);\n-        return new AsyncRpcResult(future, invocation);\n-    }\n-\n-    private static Result createDefaultValue(Invocation invocation) {\n-        ConsumerMethodModel method = (ConsumerMethodModel) invocation.get(Constants.METHOD_MODEL);\n-        return method != null ? new AppResponse(defaultReturn(method.getReturnClass())) : new AppResponse();\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;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.threadpool.ThreadlessExecutor;\r\n+import org.apache.dubbo.rpc.model.ConsumerMethodModel;\r\n+\r\n+import java.util.Map;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.Executor;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+import java.util.function.BiConsumer;\r\n+import java.util.function.Function;\r\n+\r\n+import static org.apache.dubbo.common.utils.ReflectUtils.defaultReturn;\r\n+\r\n+/**\r\n+ * This class represents an unfinished RPC call, it will hold some context information for this call, for example RpcContext and Invocation,\r\n+ * so that when the call finishes and the result returns, it can guarantee all the contexts being recovered as the same as when the call was made\r\n+ * before any callback is invoked.\r\n+ * <p>\r\n+ * TODO if it's reasonable or even right to keep a reference to Invocation?\r\n+ * <p>\r\n+ * As {@link Result} implements CompletionStage, {@link AsyncRpcResult} allows you to easily build a async filter chain whose status will be\r\n+ * driven entirely by the state of the underlying RPC call.\r\n+ * <p>\r\n+ * AsyncRpcResult does not contain any concrete value (except the underlying value bring by CompletableFuture), consider it as a status transfer node.\r\n+ * {@link #getValue()} and {@link #getException()} are all inherited from {@link Result} interface, implementing them are mainly\r\n+ * for compatibility consideration. Because many legacy {@link Filter} implementation are most possibly to call getValue directly.\r\n+ */\r\n+public class AsyncRpcResult implements Result {\r\n+    private static final Logger logger = LoggerFactory.getLogger(AsyncRpcResult.class);\r\n+\r\n+    /**\r\n+     * RpcContext may already have been changed when callback happens, it happens when the same thread is used to execute another RPC call.\r\n+     * So we should keep the reference of current RpcContext instance and restore it before callback being executed.\r\n+     */\r\n+    private RpcContext storedContext;\r\n+    private RpcContext storedServerContext;\r\n+    private Executor executor;\r\n+\r\n+    private Invocation invocation;\r\n+\r\n+    private CompletableFuture<AppResponse> responseFuture;\r\n+\r\n+    public AsyncRpcResult(CompletableFuture<AppResponse> future, Invocation invocation) {\r\n+        this.responseFuture = future;\r\n+        this.invocation = invocation;\r\n+        this.storedContext = RpcContext.getContext();\r\n+        this.storedServerContext = RpcContext.getServerContext();\r\n+    }\r\n+\r\n+    /**\r\n+     * Notice the return type of {@link #getValue} is the actual type of the RPC method, not {@link AppResponse}\r\n+     *\r\n+     * @return\r\n+     */\r\n+    @Override\r\n+    public Object getValue() {\r\n+        return getAppResponse().getValue();\r\n+    }\r\n+\r\n+    /**\r\n+     * CompletableFuture can only be completed once, so try to update the result of one completed CompletableFuture will\r\n+     * has no effect. To avoid this problem, we check the complete status of this future before update it's value.\r\n+     *\r\n+     * But notice that trying to give an uncompleted CompletableFuture a new specified value may face a race condition,\r\n+     * because the background thread watching the real result will also change the status of this CompletableFuture.\r\n+     * The result is you may lose the value you expected to set.\r\n+     *\r\n+     * @param value\r\n+     */\r\n+    @Override\r\n+    public void setValue(Object value) {\r\n+        try {\r\n+            if (responseFuture.isDone()) {\r\n+                responseFuture.get().setValue(value);\r\n+            } else {\r\n+                AppResponse appResponse = new AppResponse(invocation);\r\n+                appResponse.setValue(value);\r\n+                responseFuture.complete(appResponse);\r\n+            }\r\n+        } catch (Exception e) {\r\n+            // This should not happen in normal request process;\r\n+            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Throwable getException() {\r\n+        return getAppResponse().getException();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setException(Throwable t) {\r\n+        try {\r\n+            if (responseFuture.isDone()) {\r\n+                responseFuture.get().setException(t);\r\n+            } else {\r\n+                AppResponse appResponse = new AppResponse(invocation);\r\n+                appResponse.setException(t);\r\n+                responseFuture.complete(appResponse);\r\n+            }\r\n+        } catch (Exception e) {\r\n+            // This should not happen in normal request process;\r\n+            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean hasException() {\r\n+        return getAppResponse().hasException();\r\n+    }\r\n+\r\n+    public CompletableFuture<AppResponse> getResponseFuture() {\r\n+        return responseFuture;\r\n+    }\r\n+\r\n+    public void setResponseFuture(CompletableFuture<AppResponse> responseFuture) {\r\n+        this.responseFuture = responseFuture;\r\n+    }\r\n+\r\n+    public Result getAppResponse() {\r\n+        try {\r\n+            if (responseFuture.isDone()) {\r\n+                return responseFuture.get();\r\n+            }\r\n+        } catch (Exception e) {\r\n+            // This should not happen in normal request process;\r\n+            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\r\n+            throw new RpcException(e);\r\n+        }\r\n+\r\n+        return createDefaultValue(invocation);\r\n+    }\r\n+\r\n+    /**\r\n+     * This method will always return after a maximum 'timeout' waiting:\r\n+     * 1. if value returns before timeout, return normally.\r\n+     * 2. if no value returns after timeout, throw TimeoutException.\r\n+     *\r\n+     * @return\r\n+     * @throws InterruptedException\r\n+     * @throws ExecutionException\r\n+     */\r\n+    @Override\r\n+    public Result get() throws InterruptedException, ExecutionException {\r\n+        if (executor != null && executor instanceof ThreadlessExecutor) {\r\n+            ThreadlessExecutor threadlessExecutor = (ThreadlessExecutor) executor;\r\n+            threadlessExecutor.waitAndDrain();\r\n+        }\r\n+        return responseFuture.get();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r\n+        if (executor != null && executor instanceof ThreadlessExecutor) {\r\n+            ThreadlessExecutor threadlessExecutor = (ThreadlessExecutor) executor;\r\n+            threadlessExecutor.waitAndDrain();\r\n+        }\r\n+        return responseFuture.get(timeout, unit);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object recreate() throws Throwable {\r\n+        RpcInvocation rpcInvocation = (RpcInvocation) invocation;\r\n+        if (InvokeMode.FUTURE == rpcInvocation.getInvokeMode()) {\r\n+            return RpcContext.getContext().getFuture();\r\n+        }\r\n+\r\n+        return getAppResponse().recreate();\r\n+    }\r\n+\r\n+    public Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn) {\r\n+        this.responseFuture = this.responseFuture.whenComplete((v, t) -> {\r\n+            beforeContext.accept(v, t);\r\n+            fn.accept(v, t);\r\n+            afterContext.accept(v, t);\r\n+        });\r\n+        return this;\r\n+    }\r\n+\r\n+    @Override\r\n+    public <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn) {\r\n+        return this.responseFuture.thenApply(fn);\r\n+    }\r\n+\r\n+    @Override\r\n+    @Deprecated\r\n+    public Map<String, String> getAttachments() {\r\n+        return getAppResponse().getAttachments();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<String, Object> getObjectAttachments() {\r\n+        return getAppResponse().getObjectAttachments();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachments(Map<String, String> map) {\r\n+        getAppResponse().setAttachments(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachments(Map<String, Object> map) {\r\n+        getAppResponse().setObjectAttachments(map);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @Override\r\n+    public void addAttachments(Map<String, String> map) {\r\n+        getAppResponse().addAttachments(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addObjectAttachments(Map<String, Object> map) {\r\n+        getAppResponse().addObjectAttachments(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttachment(String key) {\r\n+        return getAppResponse().getAttachment(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key) {\r\n+        return getAppResponse().getObjectAttachment(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttachment(String key, String defaultValue) {\r\n+        return getAppResponse().getAttachment(key, defaultValue);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key, Object defaultValue) {\r\n+        return getAppResponse().getObjectAttachment(key, defaultValue);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, String value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, Object value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachment(String key, Object value) {\r\n+        getAppResponse().setAttachment(key, value);\r\n+    }\r\n+\r\n+    public Executor getExecutor() {\r\n+        return executor;\r\n+    }\r\n+\r\n+    public void setExecutor(Executor executor) {\r\n+        this.executor = executor;\r\n+    }\r\n+\r\n+    /**\r\n+     * tmp context to use when the thread switch to Dubbo thread.\r\n+     */\r\n+    private RpcContext tmpContext;\r\n+\r\n+    private RpcContext tmpServerContext;\r\n+    private BiConsumer<Result, Throwable> beforeContext = (appResponse, t) -> {\r\n+        tmpContext = RpcContext.getContext();\r\n+        tmpServerContext = RpcContext.getServerContext();\r\n+        RpcContext.restoreContext(storedContext);\r\n+        RpcContext.restoreServerContext(storedServerContext);\r\n+    };\r\n+\r\n+    private BiConsumer<Result, Throwable> afterContext = (appResponse, t) -> {\r\n+        RpcContext.restoreContext(tmpContext);\r\n+        RpcContext.restoreServerContext(tmpServerContext);\r\n+    };\r\n+\r\n+    /**\r\n+     * Some utility methods used to quickly generate default AsyncRpcResult instance.\r\n+     */\r\n+    public static AsyncRpcResult newDefaultAsyncResult(AppResponse appResponse, Invocation invocation) {\r\n+        return new AsyncRpcResult(CompletableFuture.completedFuture(appResponse), invocation);\r\n+    }\r\n+\r\n+    public static AsyncRpcResult newDefaultAsyncResult(Invocation invocation) {\r\n+        return newDefaultAsyncResult(null, null, invocation);\r\n+    }\r\n+\r\n+    public static AsyncRpcResult newDefaultAsyncResult(Object value, Invocation invocation) {\r\n+        return newDefaultAsyncResult(value, null, invocation);\r\n+    }\r\n+\r\n+    public static AsyncRpcResult newDefaultAsyncResult(Throwable t, Invocation invocation) {\r\n+        return newDefaultAsyncResult(null, t, invocation);\r\n+    }\r\n+\r\n+    public static AsyncRpcResult newDefaultAsyncResult(Object value, Throwable t, Invocation invocation) {\r\n+        CompletableFuture<AppResponse> future = new CompletableFuture<>();\r\n+        AppResponse result = new AppResponse(invocation);\r\n+        if (t != null) {\r\n+            result.setException(t);\r\n+        } else {\r\n+            result.setValue(value);\r\n+        }\r\n+        future.complete(result);\r\n+        return new AsyncRpcResult(future, invocation);\r\n+    }\r\n+\r\n+    private static Result createDefaultValue(Invocation invocation) {\r\n+        ConsumerMethodModel method = (ConsumerMethodModel) invocation.get(Constants.METHOD_MODEL);\r\n+        return method != null ? new AppResponse(defaultReturn(method.getReturnClass())) : new AppResponse();\r\n+    }\r\n+}\r\n+\r\n"}, {"source1": "org/apache/dubbo/rpc/AttachmentsAdapter.java", "source2": "org/apache/dubbo/rpc/AttachmentsAdapter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,72 +1,72 @@\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;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-/**\n- * This class provides map adapters to support attachments in RpcContext, Invocation and Result switch from\n- * <String, String> to <String, Object>\n- */\n-public class AttachmentsAdapter {\n-\n-    public static class ObjectToStringMap extends HashMap<String, String> {\n-        private Map<String, Object> attachments;\n-\n-        public ObjectToStringMap(Map<String, Object> attachments) {\n-            for (Entry<String, Object> entry : attachments.entrySet()) {\n-                String convertResult = convert(entry.getValue());\n-                if (convertResult != null) {\n-                    super.put(entry.getKey(), convertResult);\n-                }\n-            }\n-            this.attachments = attachments;\n-        }\n-\n-        @Override\n-        public String put(String key, String value) {\n-            attachments.put(key, value);\n-            return super.put(key, value);\n-        }\n-\n-        @Override\n-        public String remove(Object key) {\n-            attachments.remove(key);\n-            return super.remove(key);\n-        }\n-\n-        private String convert(Object obj) {\n-            if (obj instanceof String) {\n-                return (String) obj;\n-            }\n-            return null; // or JSON.toString(obj);\n-        }\n-\n-        @Override\n-        public void clear() {\n-            attachments.clear();\n-            super.clear();\n-        }\n-\n-        @Override\n-        public void putAll(Map<? extends String, ? extends String> map) {\n-            attachments.putAll(map);\n-            super.putAll(map);\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;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * This class provides map adapters to support attachments in RpcContext, Invocation and Result switch from\r\n+ * <String, String> to <String, Object>\r\n+ */\r\n+public class AttachmentsAdapter {\r\n+\r\n+    public static class ObjectToStringMap extends HashMap<String, String> {\r\n+        private Map<String, Object> attachments;\r\n+\r\n+        public ObjectToStringMap(Map<String, Object> attachments) {\r\n+            for (Entry<String, Object> entry : attachments.entrySet()) {\r\n+                String convertResult = convert(entry.getValue());\r\n+                if (convertResult != null) {\r\n+                    super.put(entry.getKey(), convertResult);\r\n+                }\r\n+            }\r\n+            this.attachments = attachments;\r\n+        }\r\n+\r\n+        @Override\r\n+        public String put(String key, String value) {\r\n+            attachments.put(key, value);\r\n+            return super.put(key, value);\r\n+        }\r\n+\r\n+        @Override\r\n+        public String remove(Object key) {\r\n+            attachments.remove(key);\r\n+            return super.remove(key);\r\n+        }\r\n+\r\n+        private String convert(Object obj) {\r\n+            if (obj instanceof String) {\r\n+                return (String) obj;\r\n+            }\r\n+            return null; // or JSON.toString(obj);\r\n+        }\r\n+\r\n+        @Override\r\n+        public void clear() {\r\n+            attachments.clear();\r\n+            super.clear();\r\n+        }\r\n+\r\n+        @Override\r\n+        public void putAll(Map<? extends String, ? extends String> map) {\r\n+            attachments.putAll(map);\r\n+            super.putAll(map);\r\n+        }\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/Constants.java", "source2": "org/apache/dubbo/rpc/Constants.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,97 +1,97 @@\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-\n-package org.apache.dubbo.rpc;\n-\n-public interface Constants {\n-    String LOCAL_KEY = \"local\";\n-\n-    String STUB_KEY = \"stub\";\n-\n-    String MOCK_KEY = \"mock\";\n-\n-    String DEPRECATED_KEY = \"deprecated\";\n-\n-    String $ECHO = \"$echo\";\n-    String $ECHO_PARAMETER_DESC = \"Ljava/lang/Object;\";\n-\n-    String RETURN_PREFIX = \"return \";\n-\n-    String THROW_PREFIX = \"throw\";\n-\n-    String FAIL_PREFIX = \"fail:\";\n-\n-    String FORCE_PREFIX = \"force:\";\n-\n-    String MERGER_KEY = \"merger\";\n-\n-    String IS_SERVER_KEY = \"isserver\";\n-\n-    String FORCE_USE_TAG = \"dubbo.force.tag\";\n-\n-    String TPS_LIMIT_RATE_KEY = \"tps\";\n-\n-    String TPS_LIMIT_INTERVAL_KEY = \"tps.interval\";\n-\n-    long DEFAULT_TPS_LIMIT_INTERVAL = 60 * 1000;\n-\n-    String AUTO_ATTACH_INVOCATIONID_KEY = \"invocationid.autoattach\";\n-\n-    boolean DEFAULT_STUB_EVENT = false;\n-\n-    String STUB_EVENT_METHODS_KEY = \"dubbo.stub.event.methods\";\n-\n-    String PROXY_KEY = \"proxy\";\n-\n-    String EXECUTES_KEY = \"executes\";\n-\n-    String ACCESS_LOG_KEY = \"accesslog\";\n-\n-    String ACTIVES_KEY = \"actives\";\n-\n-    String ID_KEY = \"id\";\n-\n-    String ASYNC_KEY = \"async\";\n-\n-    String RETURN_KEY = \"return\";\n-\n-    String TOKEN_KEY = \"token\";\n-\n-    String INTERFACE = \"interface\";\n-\n-    String INTERFACES = \"interfaces\";\n-\n-    String GENERIC_KEY = \"generic\";\n-\n-    String LOCAL_PROTOCOL = \"injvm\";\n-\n-    String DEFAULT_REMOTING_SERVER = \"netty\";\n-\n-    String SCOPE_KEY = \"scope\";\n-    String SCOPE_LOCAL = \"local\";\n-    String SCOPE_REMOTE = \"remote\";\n-\n-    String INPUT_KEY = \"input\";\n-    String OUTPUT_KEY = \"output\";\n-\n-    String CONSUMER_MODEL = \"consumerModel\";\n-    String METHOD_MODEL = \"methodModel\";\n-\n-    String SERIALIZATION_SECURITY_CHECK_KEY = \"serialization.security.check\";\n-    String INVOCATION_KEY = \"invocation\";\n-    String SERIALIZATION_ID_KEY = \"serialization_id\";\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+\r\n+package org.apache.dubbo.rpc;\r\n+\r\n+public interface Constants {\r\n+    String LOCAL_KEY = \"local\";\r\n+\r\n+    String STUB_KEY = \"stub\";\r\n+\r\n+    String MOCK_KEY = \"mock\";\r\n+\r\n+    String DEPRECATED_KEY = \"deprecated\";\r\n+\r\n+    String $ECHO = \"$echo\";\r\n+    String $ECHO_PARAMETER_DESC = \"Ljava/lang/Object;\";\r\n+\r\n+    String RETURN_PREFIX = \"return \";\r\n+\r\n+    String THROW_PREFIX = \"throw\";\r\n+\r\n+    String FAIL_PREFIX = \"fail:\";\r\n+\r\n+    String FORCE_PREFIX = \"force:\";\r\n+\r\n+    String MERGER_KEY = \"merger\";\r\n+\r\n+    String IS_SERVER_KEY = \"isserver\";\r\n+\r\n+    String FORCE_USE_TAG = \"dubbo.force.tag\";\r\n+\r\n+    String TPS_LIMIT_RATE_KEY = \"tps\";\r\n+\r\n+    String TPS_LIMIT_INTERVAL_KEY = \"tps.interval\";\r\n+\r\n+    long DEFAULT_TPS_LIMIT_INTERVAL = 60 * 1000;\r\n+\r\n+    String AUTO_ATTACH_INVOCATIONID_KEY = \"invocationid.autoattach\";\r\n+\r\n+    boolean DEFAULT_STUB_EVENT = false;\r\n+\r\n+    String STUB_EVENT_METHODS_KEY = \"dubbo.stub.event.methods\";\r\n+\r\n+    String PROXY_KEY = \"proxy\";\r\n+\r\n+    String EXECUTES_KEY = \"executes\";\r\n+\r\n+    String ACCESS_LOG_KEY = \"accesslog\";\r\n+\r\n+    String ACTIVES_KEY = \"actives\";\r\n+\r\n+    String ID_KEY = \"id\";\r\n+\r\n+    String ASYNC_KEY = \"async\";\r\n+\r\n+    String RETURN_KEY = \"return\";\r\n+\r\n+    String TOKEN_KEY = \"token\";\r\n+\r\n+    String INTERFACE = \"interface\";\r\n+\r\n+    String INTERFACES = \"interfaces\";\r\n+\r\n+    String GENERIC_KEY = \"generic\";\r\n+\r\n+    String LOCAL_PROTOCOL = \"injvm\";\r\n+\r\n+    String DEFAULT_REMOTING_SERVER = \"netty\";\r\n+\r\n+    String SCOPE_KEY = \"scope\";\r\n+    String SCOPE_LOCAL = \"local\";\r\n+    String SCOPE_REMOTE = \"remote\";\r\n+\r\n+    String INPUT_KEY = \"input\";\r\n+    String OUTPUT_KEY = \"output\";\r\n+\r\n+    String CONSUMER_MODEL = \"consumerModel\";\r\n+    String METHOD_MODEL = \"methodModel\";\r\n+\r\n+    String SERIALIZATION_SECURITY_CHECK_KEY = \"serialization.security.check\";\r\n+    String INVOCATION_KEY = \"invocation\";\r\n+    String SERIALIZATION_ID_KEY = \"serialization_id\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/FutureContext.java", "source2": "org/apache/dubbo/rpc/FutureContext.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,108 +1,108 @@\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;\n-\n-import org.apache.dubbo.common.threadlocal.InternalThreadLocal;\n-import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;\n-\n-import java.util.concurrent.CompletableFuture;\n-\n-/**\n- * Used for async call scenario. But if the method you are calling has a {@link CompletableFuture<?>} signature\n- * you do not need to use this class since you will get a Future response directly.\n- * <p>\n- * Remember to save the Future reference before making another call using the same thread, otherwise,\n- * the current Future will be override by the new one, which means you will lose the chance get the return value.\n- */\n-public class FutureContext {\n-\n-    private static InternalThreadLocal<FutureContext> futureTL = new InternalThreadLocal<FutureContext>() {\n-        @Override\n-        protected FutureContext initialValue() {\n-            return new FutureContext();\n-        }\n-    };\n-\n-    public static FutureContext getContext() {\n-        return futureTL.get();\n-    }\n-\n-    private CompletableFuture<?> future;\n-    private CompletableFuture<?> compatibleFuture;\n-\n-    /**\n-     * get future.\n-     *\n-     * @param <T>\n-     * @return future\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> CompletableFuture<T> getCompletableFuture() {\n-        return (CompletableFuture<T>) future;\n-    }\n-\n-    /**\n-     * set future.\n-     *\n-     * @param future\n-     */\n-    public void setFuture(CompletableFuture<?> future) {\n-        this.future = future;\n-    }\n-\n-    @Deprecated\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> CompletableFuture<T> getCompatibleCompletableFuture() {\n-        return (CompletableFuture<T>) compatibleFuture;\n-    }\n-\n-    /**\n-     * Guarantee 'using org.apache.dubbo.rpc.RpcContext.getFuture() before proxy returns' can work, a typical scenario is:\n-     * <pre>{@code\n-     *      public final class TracingFilter implements Filter {\n-     *          public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-     *              Result result = invoker.invoke(invocation);\n-     *              Future<Object> future = rpcContext.getFuture();\n-     *              if (future instanceof FutureAdapter) {\n-     *                  ((FutureAdapter) future).getFuture().setCallback(new FinishSpanCallback(span));\n-     *               }\n-     *              ......\n-     *          }\n-     *      }\n-     * }</pre>\n-     *\n-     * Start from 2.7.3, you don't have to get Future from RpcContext, we recommend using Result directly:\n-     * <pre>{@code\n-     *      public final class TracingFilter implements Filter {\n-     *          public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-     *              Result result = invoker.invoke(invocation);\n-     *              result.getResponseFuture().whenComplete(new FinishSpanCallback(span));\n-     *              ......\n-     *          }\n-     *      }\n-     * }</pre>\n-     *\n-     */\n-    @Deprecated\n-    public void setCompatibleFuture(CompletableFuture<?> compatibleFuture) {\n-        this.compatibleFuture = compatibleFuture;\n-        if (compatibleFuture != null) {\n-            this.setFuture(new FutureAdapter(compatibleFuture));\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;\r\n+\r\n+import org.apache.dubbo.common.threadlocal.InternalThreadLocal;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;\r\n+\r\n+import java.util.concurrent.CompletableFuture;\r\n+\r\n+/**\r\n+ * Used for async call scenario. But if the method you are calling has a {@link CompletableFuture<?>} signature\r\n+ * you do not need to use this class since you will get a Future response directly.\r\n+ * <p>\r\n+ * Remember to save the Future reference before making another call using the same thread, otherwise,\r\n+ * the current Future will be override by the new one, which means you will lose the chance get the return value.\r\n+ */\r\n+public class FutureContext {\r\n+\r\n+    private static InternalThreadLocal<FutureContext> futureTL = new InternalThreadLocal<FutureContext>() {\r\n+        @Override\r\n+        protected FutureContext initialValue() {\r\n+            return new FutureContext();\r\n+        }\r\n+    };\r\n+\r\n+    public static FutureContext getContext() {\r\n+        return futureTL.get();\r\n+    }\r\n+\r\n+    private CompletableFuture<?> future;\r\n+    private CompletableFuture<?> compatibleFuture;\r\n+\r\n+    /**\r\n+     * get future.\r\n+     *\r\n+     * @param <T>\r\n+     * @return future\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> CompletableFuture<T> getCompletableFuture() {\r\n+        return (CompletableFuture<T>) future;\r\n+    }\r\n+\r\n+    /**\r\n+     * set future.\r\n+     *\r\n+     * @param future\r\n+     */\r\n+    public void setFuture(CompletableFuture<?> future) {\r\n+        this.future = future;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> CompletableFuture<T> getCompatibleCompletableFuture() {\r\n+        return (CompletableFuture<T>) compatibleFuture;\r\n+    }\r\n+\r\n+    /**\r\n+     * Guarantee 'using org.apache.dubbo.rpc.RpcContext.getFuture() before proxy returns' can work, a typical scenario is:\r\n+     * <pre>{@code\r\n+     *      public final class TracingFilter implements Filter {\r\n+     *          public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+     *              Result result = invoker.invoke(invocation);\r\n+     *              Future<Object> future = rpcContext.getFuture();\r\n+     *              if (future instanceof FutureAdapter) {\r\n+     *                  ((FutureAdapter) future).getFuture().setCallback(new FinishSpanCallback(span));\r\n+     *               }\r\n+     *              ......\r\n+     *          }\r\n+     *      }\r\n+     * }</pre>\r\n+     *\r\n+     * Start from 2.7.3, you don't have to get Future from RpcContext, we recommend using Result directly:\r\n+     * <pre>{@code\r\n+     *      public final class TracingFilter implements Filter {\r\n+     *          public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+     *              Result result = invoker.invoke(invocation);\r\n+     *              result.getResponseFuture().whenComplete(new FinishSpanCallback(span));\r\n+     *              ......\r\n+     *          }\r\n+     *      }\r\n+     * }</pre>\r\n+     *\r\n+     */\r\n+    @Deprecated\r\n+    public void setCompatibleFuture(CompletableFuture<?> compatibleFuture) {\r\n+        this.compatibleFuture = compatibleFuture;\r\n+        if (compatibleFuture != null) {\r\n+            this.setFuture(new FutureAdapter(compatibleFuture));\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/Invocation.java", "source2": "org/apache/dubbo/rpc/Invocation.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,141 +1,141 @@\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;\n-\n-import org.apache.dubbo.common.Experimental;\n-\n-import java.util.Map;\n-import java.util.stream.Stream;\n-\n-/**\n- * Invocation. (API, Prototype, NonThreadSafe)\n- *\n- * @serial Don't change the class name and package name.\n- * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\n- * @see org.apache.dubbo.rpc.RpcInvocation\n- */\n-public interface Invocation {\n-\n-    String getTargetServiceUniqueName();\n-\n-    String getProtocolServiceKey();\n-\n-    /**\n-     * get method name.\n-     *\n-     * @return method name.\n-     * @serial\n-     */\n-    String getMethodName();\n-\n-\n-    /**\n-     * get the interface name\n-     * @return\n-     */\n-    String getServiceName();\n-\n-    /**\n-     * get parameter types.\n-     *\n-     * @return parameter types.\n-     * @serial\n-     */\n-    Class<?>[] getParameterTypes();\n-\n-    /**\n-     * get parameter's signature, string representation of parameter types.\n-     *\n-     * @return parameter's signature\n-     */\n-    default String[] getCompatibleParamSignatures() {\n-        return Stream.of(getParameterTypes())\n-                .map(Class::getName)\n-                .toArray(String[]::new);\n-    }\n-\n-    /**\n-     * get arguments.\n-     *\n-     * @return arguments.\n-     * @serial\n-     */\n-    Object[] getArguments();\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments.\n-     * @serial\n-     */\n-    Map<String, String> getAttachments();\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Map<String, Object> getObjectAttachments();\n-\n-    void setAttachment(String key, String value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setAttachment(String key, Object value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setObjectAttachment(String key, Object value);\n-\n-    void setAttachmentIfAbsent(String key, String value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setAttachmentIfAbsent(String key, Object value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setObjectAttachmentIfAbsent(String key, Object value);\n-\n-    /**\n-     * get attachment by key.\n-     *\n-     * @return attachment value.\n-     * @serial\n-     */\n-    String getAttachment(String key);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Object getObjectAttachment(String key);\n-\n-    /**\n-     * get attachment by key with default value.\n-     *\n-     * @return attachment value.\n-     * @serial\n-     */\n-    String getAttachment(String key, String defaultValue);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Object getObjectAttachment(String key, Object defaultValue);\n-\n-    /**\n-     * get the invoker in current context.\n-     *\n-     * @return invoker.\n-     * @transient\n-     */\n-    Invoker<?> getInvoker();\n-\n-    Object put(Object key, Object value);\n-\n-    Object get(Object key);\n-\n-    Map<Object, Object> getAttributes();\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;\r\n+\r\n+import org.apache.dubbo.common.Experimental;\r\n+\r\n+import java.util.Map;\r\n+import java.util.stream.Stream;\r\n+\r\n+/**\r\n+ * Invocation. (API, Prototype, NonThreadSafe)\r\n+ *\r\n+ * @serial Don't change the class name and package name.\r\n+ * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\r\n+ * @see org.apache.dubbo.rpc.RpcInvocation\r\n+ */\r\n+public interface Invocation {\r\n+\r\n+    String getTargetServiceUniqueName();\r\n+\r\n+    String getProtocolServiceKey();\r\n+\r\n+    /**\r\n+     * get method name.\r\n+     *\r\n+     * @return method name.\r\n+     * @serial\r\n+     */\r\n+    String getMethodName();\r\n+\r\n+\r\n+    /**\r\n+     * get the interface name\r\n+     * @return\r\n+     */\r\n+    String getServiceName();\r\n+\r\n+    /**\r\n+     * get parameter types.\r\n+     *\r\n+     * @return parameter types.\r\n+     * @serial\r\n+     */\r\n+    Class<?>[] getParameterTypes();\r\n+\r\n+    /**\r\n+     * get parameter's signature, string representation of parameter types.\r\n+     *\r\n+     * @return parameter's signature\r\n+     */\r\n+    default String[] getCompatibleParamSignatures() {\r\n+        return Stream.of(getParameterTypes())\r\n+                .map(Class::getName)\r\n+                .toArray(String[]::new);\r\n+    }\r\n+\r\n+    /**\r\n+     * get arguments.\r\n+     *\r\n+     * @return arguments.\r\n+     * @serial\r\n+     */\r\n+    Object[] getArguments();\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments.\r\n+     * @serial\r\n+     */\r\n+    Map<String, String> getAttachments();\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Map<String, Object> getObjectAttachments();\r\n+\r\n+    void setAttachment(String key, String value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setAttachment(String key, Object value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setObjectAttachment(String key, Object value);\r\n+\r\n+    void setAttachmentIfAbsent(String key, String value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setAttachmentIfAbsent(String key, Object value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setObjectAttachmentIfAbsent(String key, Object value);\r\n+\r\n+    /**\r\n+     * get attachment by key.\r\n+     *\r\n+     * @return attachment value.\r\n+     * @serial\r\n+     */\r\n+    String getAttachment(String key);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Object getObjectAttachment(String key);\r\n+\r\n+    /**\r\n+     * get attachment by key with default value.\r\n+     *\r\n+     * @return attachment value.\r\n+     * @serial\r\n+     */\r\n+    String getAttachment(String key, String defaultValue);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Object getObjectAttachment(String key, Object defaultValue);\r\n+\r\n+    /**\r\n+     * get the invoker in current context.\r\n+     *\r\n+     * @return invoker.\r\n+     * @transient\r\n+     */\r\n+    Invoker<?> getInvoker();\r\n+\r\n+    Object put(Object key, Object value);\r\n+\r\n+    Object get(Object key);\r\n+\r\n+    Map<Object, Object> getAttributes();\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/InvokeMode.java", "source2": "org/apache/dubbo/rpc/InvokeMode.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,23 +1,23 @@\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;\n-\n-public enum InvokeMode {\n-\n-    SYNC, ASYNC, FUTURE;\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;\r\n+\r\n+public enum InvokeMode {\r\n+\r\n+    SYNC, ASYNC, FUTURE;\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/ListenableFilter.java", "source2": "org/apache/dubbo/rpc/ListenableFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,53 +1,53 @@\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;\n-\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-/**\n- * It's recommended to implement Filter.Listener directly for callback registration, check the default implementation,\n- * see {@link org.apache.dubbo.rpc.filter.ExceptionFilter}, for example.\n- * <p>\n- * If you do not want to share Listener instance between RPC calls. You can use ListenableFilter\n- * to keep a 'one Listener each RPC call' model.\n- */\n-public abstract class ListenableFilter implements Filter {\n-\n-    protected Listener listener = null;\n-    protected final ConcurrentMap<Invocation, Listener> listeners = new ConcurrentHashMap<>();\n-\n-    public Listener listener() {\n-        return listener;\n-    }\n-\n-    public Listener listener(Invocation invocation) {\n-        Listener invListener = listeners.get(invocation);\n-        if (invListener == null) {\n-            invListener = listener;\n-        }\n-        return invListener;\n-    }\n-\n-    public void addListener(Invocation invocation, Listener listener) {\n-        listeners.putIfAbsent(invocation, listener);\n-    }\n-\n-    public void removeListener(Invocation invocation) {\n-        listeners.remove(invocation);\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;\r\n+\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+/**\r\n+ * It's recommended to implement Filter.Listener directly for callback registration, check the default implementation,\r\n+ * see {@link org.apache.dubbo.rpc.filter.ExceptionFilter}, for example.\r\n+ * <p>\r\n+ * If you do not want to share Listener instance between RPC calls. You can use ListenableFilter\r\n+ * to keep a 'one Listener each RPC call' model.\r\n+ */\r\n+public abstract class ListenableFilter implements Filter {\r\n+\r\n+    protected Listener listener = null;\r\n+    protected final ConcurrentMap<Invocation, Listener> listeners = new ConcurrentHashMap<>();\r\n+\r\n+    public Listener listener() {\r\n+        return listener;\r\n+    }\r\n+\r\n+    public Listener listener(Invocation invocation) {\r\n+        Listener invListener = listeners.get(invocation);\r\n+        if (invListener == null) {\r\n+            invListener = listener;\r\n+        }\r\n+        return invListener;\r\n+    }\r\n+\r\n+    public void addListener(Invocation invocation, Listener listener) {\r\n+        listeners.putIfAbsent(invocation, listener);\r\n+    }\r\n+\r\n+    public void removeListener(Invocation invocation) {\r\n+        listeners.remove(invocation);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/ProtocolServer.java", "source2": "org/apache/dubbo/rpc/ProtocolServer.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,47 +1,47 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.remoting.RemotingServer;\n-\n-/**\n- * Distinct from {@link RemotingServer}, each protocol holds one or more ProtocolServers(the number usually decides by port numbers),\n- * while each ProtocolServer holds zero or one RemotingServer.\n- */\n-public interface ProtocolServer {\n-\n-    default RemotingServer getRemotingServer() {\n-        return null;\n-    }\n-\n-    default void setRemotingServers(RemotingServer server) {\n-    }\n-\n-    String getAddress();\n-\n-    void setAddress(String address);\n-\n-    default URL getUrl() {\n-        return null;\n-    }\n-\n-    default void reset(URL url) {\n-    }\n-\n-    void close();\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.remoting.RemotingServer;\r\n+\r\n+/**\r\n+ * Distinct from {@link RemotingServer}, each protocol holds one or more ProtocolServers(the number usually decides by port numbers),\r\n+ * while each ProtocolServer holds zero or one RemotingServer.\r\n+ */\r\n+public interface ProtocolServer {\r\n+\r\n+    default RemotingServer getRemotingServer() {\r\n+        return null;\r\n+    }\r\n+\r\n+    default void setRemotingServers(RemotingServer server) {\r\n+    }\r\n+\r\n+    String getAddress();\r\n+\r\n+    void setAddress(String address);\r\n+\r\n+    default URL getUrl() {\r\n+        return null;\r\n+    }\r\n+\r\n+    default void reset(URL url) {\r\n+    }\r\n+\r\n+    void close();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/ProxyFactory.java", "source2": "org/apache/dubbo/rpc/ProxyFactory.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,61 +1,61 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.Adaptive;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import static org.apache.dubbo.rpc.Constants.PROXY_KEY;\n-\n-/**\n- * ProxyFactory. (API/SPI, Singleton, ThreadSafe)\n- */\n-@SPI(\"javassist\")\n-public interface ProxyFactory {\n-\n-    /**\n-     * create proxy.\n-     *\n-     * @param invoker\n-     * @return proxy\n-     */\n-    @Adaptive({PROXY_KEY})\n-    <T> T getProxy(Invoker<T> invoker) throws RpcException;\n-\n-    /**\n-     * create proxy.\n-     *\n-     * @param invoker\n-     * @return proxy\n-     */\n-    @Adaptive({PROXY_KEY})\n-    <T> T getProxy(Invoker<T> invoker, boolean generic) throws RpcException;\n-\n-    /**\n-     * create invoker.\n-     *\n-     * @param <T>\n-     * @param proxy\n-     * @param type\n-     * @param url\n-     * @return invoker\n-     */\n-    @Adaptive({PROXY_KEY})\n-    <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) throws RpcException;\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.Adaptive;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import static org.apache.dubbo.rpc.Constants.PROXY_KEY;\r\n+\r\n+/**\r\n+ * ProxyFactory. (API/SPI, Singleton, ThreadSafe)\r\n+ */\r\n+@SPI(\"javassist\")\r\n+public interface ProxyFactory {\r\n+\r\n+    /**\r\n+     * create proxy.\r\n+     *\r\n+     * @param invoker\r\n+     * @return proxy\r\n+     */\r\n+    @Adaptive({PROXY_KEY})\r\n+    <T> T getProxy(Invoker<T> invoker) throws RpcException;\r\n+\r\n+    /**\r\n+     * create proxy.\r\n+     *\r\n+     * @param invoker\r\n+     * @return proxy\r\n+     */\r\n+    @Adaptive({PROXY_KEY})\r\n+    <T> T getProxy(Invoker<T> invoker, boolean generic) throws RpcException;\r\n+\r\n+    /**\r\n+     * create invoker.\r\n+     *\r\n+     * @param <T>\r\n+     * @param proxy\r\n+     * @param type\r\n+     * @param url\r\n+     * @return invoker\r\n+     */\r\n+    @Adaptive({PROXY_KEY})\r\n+    <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) throws RpcException;\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/Result.java", "source2": "org/apache/dubbo/rpc/Result.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,189 +1,189 @@\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;\n-\n-import org.apache.dubbo.common.Experimental;\n-\n-import java.io.Serializable;\n-import java.util.Map;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.CompletionStage;\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.Future;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-import java.util.function.BiConsumer;\n-import java.util.function.Function;\n-\n-\n-/**\n- * (API, Prototype, NonThreadSafe)\n- *\n- * An RPC {@link Result}.\n- *\n- * Known implementations are:\n- * 1. {@link AsyncRpcResult}, it's a {@link CompletionStage} whose underlying value signifies the return value of an RPC call.\n- * 2. {@link AppResponse}, it inevitably inherits {@link CompletionStage} and {@link Future}, but you should never treat AppResponse as a type of Future,\n- *    instead, it is a normal concrete type.\n- *\n- * @serial Don't change the class name and package name.\n- * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\n- * @see AppResponse\n- */\n-public interface Result extends Serializable {\n-\n-    /**\n-     * Get invoke result.\n-     *\n-     * @return result. if no result return null.\n-     */\n-    Object getValue();\n-\n-    void setValue(Object value);\n-\n-    /**\n-     * Get exception.\n-     *\n-     * @return exception. if no exception return null.\n-     */\n-    Throwable getException();\n-\n-    void setException(Throwable t);\n-\n-    /**\n-     * Has exception.\n-     *\n-     * @return has exception.\n-     */\n-    boolean hasException();\n-\n-    /**\n-     * Recreate.\n-     * <p>\n-     * <code>\n-     * if (hasException()) {\n-     * throw getException();\n-     * } else {\n-     * return getValue();\n-     * }\n-     * </code>\n-     *\n-     * @return result.\n-     * @throws if has exception throw it.\n-     */\n-    Object recreate() throws Throwable;\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments.\n-     */\n-    Map<String, String> getAttachments();\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments.\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Map<String, Object> getObjectAttachments();\n-\n-    /**\n-     * Add the specified map to existing attachments in this instance.\n-     *\n-     * @param map\n-     */\n-    void addAttachments(Map<String, String> map);\n-\n-    /**\n-     * Add the specified map to existing attachments in this instance.\n-     *\n-     * @param map\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void addObjectAttachments(Map<String, Object> map);\n-\n-    /**\n-     * Replace the existing attachments with the specified param.\n-     *\n-     * @param map\n-     */\n-    void setAttachments(Map<String, String> map);\n-\n-    /**\n-     * Replace the existing attachments with the specified param.\n-     *\n-     * @param map\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setObjectAttachments(Map<String, Object> map);\n-\n-    /**\n-     * get attachment by key.\n-     *\n-     * @return attachment value.\n-     */\n-    String getAttachment(String key);\n-\n-    /**\n-     * get attachment by key.\n-     *\n-     * @return attachment value.\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Object getObjectAttachment(String key);\n-\n-    /**\n-     * get attachment by key with default value.\n-     *\n-     * @return attachment value.\n-     */\n-    String getAttachment(String key, String defaultValue);\n-\n-    /**\n-     * get attachment by key with default value.\n-     *\n-     * @return attachment value.\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Object getObjectAttachment(String key, Object defaultValue);\n-\n-    void setAttachment(String key, String value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setAttachment(String key, Object value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setObjectAttachment(String key, Object value);\n-\n-    /**\n-     * Add a callback which can be triggered when the RPC call finishes.\n-     * <p>\n-     * Just as the method name implies, this method will guarantee the callback being triggered under the same context as when the call was started,\n-     * see implementation in {@link Result#whenCompleteWithContext(BiConsumer)}\n-     *\n-     * @param fn\n-     * @return\n-     */\n-    Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn);\n-\n-    <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn);\n-\n-    Result get() throws InterruptedException, ExecutionException;\n-\n-    Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;\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;\r\n+\r\n+import org.apache.dubbo.common.Experimental;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.Map;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.CompletionStage;\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.Future;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+import java.util.function.BiConsumer;\r\n+import java.util.function.Function;\r\n+\r\n+\r\n+/**\r\n+ * (API, Prototype, NonThreadSafe)\r\n+ *\r\n+ * An RPC {@link Result}.\r\n+ *\r\n+ * Known implementations are:\r\n+ * 1. {@link AsyncRpcResult}, it's a {@link CompletionStage} whose underlying value signifies the return value of an RPC call.\r\n+ * 2. {@link AppResponse}, it inevitably inherits {@link CompletionStage} and {@link Future}, but you should never treat AppResponse as a type of Future,\r\n+ *    instead, it is a normal concrete type.\r\n+ *\r\n+ * @serial Don't change the class name and package name.\r\n+ * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\r\n+ * @see AppResponse\r\n+ */\r\n+public interface Result extends Serializable {\r\n+\r\n+    /**\r\n+     * Get invoke result.\r\n+     *\r\n+     * @return result. if no result return null.\r\n+     */\r\n+    Object getValue();\r\n+\r\n+    void setValue(Object value);\r\n+\r\n+    /**\r\n+     * Get exception.\r\n+     *\r\n+     * @return exception. if no exception return null.\r\n+     */\r\n+    Throwable getException();\r\n+\r\n+    void setException(Throwable t);\r\n+\r\n+    /**\r\n+     * Has exception.\r\n+     *\r\n+     * @return has exception.\r\n+     */\r\n+    boolean hasException();\r\n+\r\n+    /**\r\n+     * Recreate.\r\n+     * <p>\r\n+     * <code>\r\n+     * if (hasException()) {\r\n+     * throw getException();\r\n+     * } else {\r\n+     * return getValue();\r\n+     * }\r\n+     * </code>\r\n+     *\r\n+     * @return result.\r\n+     * @throws if has exception throw it.\r\n+     */\r\n+    Object recreate() throws Throwable;\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments.\r\n+     */\r\n+    Map<String, String> getAttachments();\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments.\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Map<String, Object> getObjectAttachments();\r\n+\r\n+    /**\r\n+     * Add the specified map to existing attachments in this instance.\r\n+     *\r\n+     * @param map\r\n+     */\r\n+    void addAttachments(Map<String, String> map);\r\n+\r\n+    /**\r\n+     * Add the specified map to existing attachments in this instance.\r\n+     *\r\n+     * @param map\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void addObjectAttachments(Map<String, Object> map);\r\n+\r\n+    /**\r\n+     * Replace the existing attachments with the specified param.\r\n+     *\r\n+     * @param map\r\n+     */\r\n+    void setAttachments(Map<String, String> map);\r\n+\r\n+    /**\r\n+     * Replace the existing attachments with the specified param.\r\n+     *\r\n+     * @param map\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setObjectAttachments(Map<String, Object> map);\r\n+\r\n+    /**\r\n+     * get attachment by key.\r\n+     *\r\n+     * @return attachment value.\r\n+     */\r\n+    String getAttachment(String key);\r\n+\r\n+    /**\r\n+     * get attachment by key.\r\n+     *\r\n+     * @return attachment value.\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Object getObjectAttachment(String key);\r\n+\r\n+    /**\r\n+     * get attachment by key with default value.\r\n+     *\r\n+     * @return attachment value.\r\n+     */\r\n+    String getAttachment(String key, String defaultValue);\r\n+\r\n+    /**\r\n+     * get attachment by key with default value.\r\n+     *\r\n+     * @return attachment value.\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Object getObjectAttachment(String key, Object defaultValue);\r\n+\r\n+    void setAttachment(String key, String value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setAttachment(String key, Object value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setObjectAttachment(String key, Object value);\r\n+\r\n+    /**\r\n+     * Add a callback which can be triggered when the RPC call finishes.\r\n+     * <p>\r\n+     * Just as the method name implies, this method will guarantee the callback being triggered under the same context as when the call was started,\r\n+     * see implementation in {@link Result#whenCompleteWithContext(BiConsumer)}\r\n+     *\r\n+     * @param fn\r\n+     * @return\r\n+     */\r\n+    Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn);\r\n+\r\n+    <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn);\r\n+\r\n+    Result get() throws InterruptedException, ExecutionException;\r\n+\r\n+    Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/RpcContext.java", "source2": "org/apache/dubbo/rpc/RpcContext.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,859 +1,859 @@\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;\n-\n-import org.apache.dubbo.common.Experimental;\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.threadlocal.InternalThreadLocal;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.NetUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.net.InetSocketAddress;\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.concurrent.Callable;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.Future;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\n-import static org.apache.dubbo.rpc.Constants.RETURN_KEY;\n-\n-\n-/**\n- * Thread local context. (API, ThreadLocal, ThreadSafe)\n- * <p>\n- * Note: RpcContext is a temporary state holder. States in RpcContext changes every time when request is sent or received.\n- * For example: A invokes B, then B invokes C. On service B, RpcContext saves invocation info from A to B before B\n- * starts invoking C, and saves invocation info from B to C after B invokes C.\n- *\n- * @export\n- * @see org.apache.dubbo.rpc.filter.ContextFilter\n- */\n-public class RpcContext {\n-\n-    /**\n-     * use internal thread local to improve performance\n-     */\n-    // FIXME REQUEST_CONTEXT\n-    private static final InternalThreadLocal<RpcContext> LOCAL = new InternalThreadLocal<RpcContext>() {\n-        @Override\n-        protected RpcContext initialValue() {\n-            return new RpcContext();\n-        }\n-    };\n-\n-    // FIXME RESPONSE_CONTEXT\n-    private static final InternalThreadLocal<RpcContext> SERVER_LOCAL = new InternalThreadLocal<RpcContext>() {\n-        @Override\n-        protected RpcContext initialValue() {\n-            return new RpcContext();\n-        }\n-    };\n-\n-    protected final Map<String, Object> attachments = new HashMap<>();\n-    private final Map<String, Object> values = new HashMap<String, Object>();\n-\n-    private List<URL> urls;\n-\n-    private URL url;\n-\n-    private String methodName;\n-\n-    private Class<?>[] parameterTypes;\n-\n-    private Object[] arguments;\n-\n-    private InetSocketAddress localAddress;\n-\n-    private InetSocketAddress remoteAddress;\n-\n-    private String remoteApplicationName;\n-\n-    @Deprecated\n-    private List<Invoker<?>> invokers;\n-    @Deprecated\n-    private Invoker<?> invoker;\n-    @Deprecated\n-    private Invocation invocation;\n-\n-    // now we don't use the 'values' map to hold these objects\n-    // we want these objects to be as generic as possible\n-    private Object request;\n-    private Object response;\n-    private AsyncContext asyncContext;\n-\n-    private boolean remove = true;\n-\n-\n-    protected RpcContext() {\n-    }\n-\n-    /**\n-     * get server side context.\n-     *\n-     * @return server context\n-     */\n-    public static RpcContext getServerContext() {\n-        return SERVER_LOCAL.get();\n-    }\n-\n-    public static void restoreServerContext(RpcContext oldServerContext) {\n-        SERVER_LOCAL.set(oldServerContext);\n-    }\n-\n-    /**\n-     * remove server side context.\n-     *\n-     * @see org.apache.dubbo.rpc.filter.ContextFilter\n-     */\n-    public static void removeServerContext() {\n-        SERVER_LOCAL.remove();\n-    }\n-\n-    /**\n-     * get context.\n-     *\n-     * @return context\n-     */\n-    public static RpcContext getContext() {\n-        return LOCAL.get();\n-    }\n-\n-    public boolean canRemove() {\n-        return remove;\n-    }\n-\n-    public void clearAfterEachInvoke(boolean remove) {\n-        this.remove = remove;\n-    }\n-\n-    public static void restoreContext(RpcContext oldContext) {\n-        LOCAL.set(oldContext);\n-    }\n-\n-    /**\n-     * remove context.\n-     *\n-     * @see org.apache.dubbo.rpc.filter.ContextFilter\n-     */\n-    public static void removeContext() {\n-        removeContext(false);\n-    }\n-\n-    /**\n-     * customized for internal use.\n-     *\n-     * @param checkCanRemove if need check before remove\n-     */\n-    public static void removeContext(boolean checkCanRemove) {\n-        if (LOCAL.get().canRemove()) {\n-            LOCAL.remove();\n-        }\n-    }\n-\n-    /**\n-     * Get the request object of the underlying RPC protocol, e.g. HttpServletRequest\n-     *\n-     * @return null if the underlying protocol doesn't provide support for getting request\n-     */\n-    public Object getRequest() {\n-        return request;\n-    }\n-\n-    public void setRequest(Object request) {\n-        this.request = request;\n-    }\n-\n-    /**\n-     * Get the request object of the underlying RPC protocol, e.g. HttpServletRequest\n-     *\n-     * @return null if the underlying protocol doesn't provide support for getting request or the request is not of the specified type\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> T getRequest(Class<T> clazz) {\n-        return (request != null && clazz.isAssignableFrom(request.getClass())) ? (T) request : null;\n-    }\n-\n-    /**\n-     * Get the response object of the underlying RPC protocol, e.g. HttpServletResponse\n-     *\n-     * @return null if the underlying protocol doesn't provide support for getting response\n-     */\n-    public Object getResponse() {\n-        return response;\n-    }\n-\n-    public void setResponse(Object response) {\n-        this.response = response;\n-    }\n-\n-    /**\n-     * Get the response object of the underlying RPC protocol, e.g. HttpServletResponse\n-     *\n-     * @return null if the underlying protocol doesn't provide support for getting response or the response is not of the specified type\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> T getResponse(Class<T> clazz) {\n-        return (response != null && clazz.isAssignableFrom(response.getClass())) ? (T) response : null;\n-    }\n-\n-    /**\n-     * is provider side.\n-     *\n-     * @return provider side.\n-     */\n-    public boolean isProviderSide() {\n-        return !isConsumerSide();\n-    }\n-\n-    /**\n-     * is consumer side.\n-     *\n-     * @return consumer side.\n-     */\n-    public boolean isConsumerSide() {\n-        return getUrl().getParameter(SIDE_KEY, PROVIDER_SIDE).equals(CONSUMER_SIDE);\n-    }\n-\n-    /**\n-     * get CompletableFuture.\n-     *\n-     * @param <T>\n-     * @return future\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> CompletableFuture<T> getCompletableFuture() {\n-        return FutureContext.getContext().getCompletableFuture();\n-    }\n-\n-    /**\n-     * get future.\n-     *\n-     * @param <T>\n-     * @return future\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> Future<T> getFuture() {\n-        return FutureContext.getContext().getCompletableFuture();\n-    }\n-\n-    /**\n-     * set future.\n-     *\n-     * @param future\n-     */\n-    public void setFuture(CompletableFuture<?> future) {\n-        FutureContext.getContext().setFuture(future);\n-    }\n-\n-    public List<URL> getUrls() {\n-        return urls == null && url != null ? (List<URL>) Arrays.asList(url) : urls;\n-    }\n-\n-    public void setUrls(List<URL> urls) {\n-        this.urls = urls;\n-    }\n-\n-    public URL getUrl() {\n-        return url;\n-    }\n-\n-    public void setUrl(URL url) {\n-        this.url = url;\n-    }\n-\n-    /**\n-     * get method name.\n-     *\n-     * @return method name.\n-     */\n-    public String getMethodName() {\n-        return methodName;\n-    }\n-\n-    public void setMethodName(String methodName) {\n-        this.methodName = methodName;\n-    }\n-\n-    /**\n-     * get parameter types.\n-     *\n-     * @serial\n-     */\n-    public Class<?>[] getParameterTypes() {\n-        return parameterTypes;\n-    }\n-\n-    public void setParameterTypes(Class<?>[] parameterTypes) {\n-        this.parameterTypes = parameterTypes;\n-    }\n-\n-    /**\n-     * get arguments.\n-     *\n-     * @return arguments.\n-     */\n-    public Object[] getArguments() {\n-        return arguments;\n-    }\n-\n-    public void setArguments(Object[] arguments) {\n-        this.arguments = arguments;\n-    }\n-\n-    /**\n-     * set local address.\n-     *\n-     * @param host\n-     * @param port\n-     * @return context\n-     */\n-    public RpcContext setLocalAddress(String host, int port) {\n-        if (port < 0) {\n-            port = 0;\n-        }\n-        this.localAddress = InetSocketAddress.createUnresolved(host, port);\n-        return this;\n-    }\n-\n-    /**\n-     * get local address.\n-     *\n-     * @return local address\n-     */\n-    public InetSocketAddress getLocalAddress() {\n-        return localAddress;\n-    }\n-\n-    /**\n-     * set local address.\n-     *\n-     * @param address\n-     * @return context\n-     */\n-    public RpcContext setLocalAddress(InetSocketAddress address) {\n-        this.localAddress = address;\n-        return this;\n-    }\n-\n-    public String getLocalAddressString() {\n-        return getLocalHost() + \":\" + getLocalPort();\n-    }\n-\n-    /**\n-     * get local host name.\n-     *\n-     * @return local host name\n-     */\n-    public String getLocalHostName() {\n-        String host = localAddress == null ? null : localAddress.getHostName();\n-        if (StringUtils.isEmpty(host)) {\n-            return getLocalHost();\n-        }\n-        return host;\n-    }\n-\n-    /**\n-     * set remote address.\n-     *\n-     * @param host\n-     * @param port\n-     * @return context\n-     */\n-    public RpcContext setRemoteAddress(String host, int port) {\n-        if (port < 0) {\n-            port = 0;\n-        }\n-        this.remoteAddress = InetSocketAddress.createUnresolved(host, port);\n-        return this;\n-    }\n-\n-    /**\n-     * get remote address.\n-     *\n-     * @return remote address\n-     */\n-    public InetSocketAddress getRemoteAddress() {\n-        return remoteAddress;\n-    }\n-\n-    /**\n-     * set remote address.\n-     *\n-     * @param address\n-     * @return context\n-     */\n-    public RpcContext setRemoteAddress(InetSocketAddress address) {\n-        this.remoteAddress = address;\n-        return this;\n-    }\n-\n-    public String getRemoteApplicationName() {\n-        return remoteApplicationName;\n-    }\n-\n-    public RpcContext setRemoteApplicationName(String remoteApplicationName) {\n-        this.remoteApplicationName = remoteApplicationName;\n-        return this;\n-    }\n-\n-    /**\n-     * get remote address string.\n-     *\n-     * @return remote address string.\n-     */\n-    public String getRemoteAddressString() {\n-        return getRemoteHost() + \":\" + getRemotePort();\n-    }\n-\n-    /**\n-     * get remote host name.\n-     *\n-     * @return remote host name\n-     */\n-    public String getRemoteHostName() {\n-        return remoteAddress == null ? null : remoteAddress.getHostName();\n-    }\n-\n-    /**\n-     * get local host.\n-     *\n-     * @return local host\n-     */\n-    public String getLocalHost() {\n-        String host = localAddress == null ? null :\n-                localAddress.getAddress() == null ? localAddress.getHostName()\n-                        : NetUtils.filterLocalHost(localAddress.getAddress().getHostAddress());\n-        if (host == null || host.length() == 0) {\n-            return NetUtils.getLocalHost();\n-        }\n-        return host;\n-    }\n-\n-    /**\n-     * get local port.\n-     *\n-     * @return port\n-     */\n-    public int getLocalPort() {\n-        return localAddress == null ? 0 : localAddress.getPort();\n-    }\n-\n-    /**\n-     * get remote host.\n-     *\n-     * @return remote host\n-     */\n-    public String getRemoteHost() {\n-        return remoteAddress == null ? null :\n-                remoteAddress.getAddress() == null ? remoteAddress.getHostName()\n-                        : NetUtils.filterLocalHost(remoteAddress.getAddress().getHostAddress());\n-    }\n-\n-    /**\n-     * get remote port.\n-     *\n-     * @return remote port\n-     */\n-    public int getRemotePort() {\n-        return remoteAddress == null ? 0 : remoteAddress.getPort();\n-    }\n-\n-    /**\n-     * also see {@link #getObjectAttachment(String)}.\n-     *\n-     * @param key\n-     * @return attachment\n-     */\n-    public String getAttachment(String key) {\n-        Object value = attachments.get(key);\n-        if (value instanceof String) {\n-            return (String) value;\n-        }\n-        return null; // or JSON.toString(value);\n-    }\n-\n-    /**\n-     * get attachment.\n-     *\n-     * @param key\n-     * @return attachment\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    public Object getObjectAttachment(String key) {\n-        return attachments.get(key);\n-    }\n-\n-    /**\n-     * set attachment.\n-     *\n-     * @param key\n-     * @param value\n-     * @return context\n-     */\n-    public RpcContext setAttachment(String key, String value) {\n-        return setObjectAttachment(key, (Object) value);\n-    }\n-\n-    public RpcContext setAttachment(String key, Object value) {\n-        return setObjectAttachment(key, value);\n-    }\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    public RpcContext setObjectAttachment(String key, Object value) {\n-        if (value == null) {\n-            attachments.remove(key);\n-        } else {\n-            attachments.put(key, value);\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * remove attachment.\n-     *\n-     * @param key\n-     * @return context\n-     */\n-    public RpcContext removeAttachment(String key) {\n-        attachments.remove(key);\n-        return this;\n-    }\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments\n-     */\n-    @Deprecated\n-    public Map<String, String> getAttachments() {\n-        return new AttachmentsAdapter.ObjectToStringMap(this.getObjectAttachments());\n-    }\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    public Map<String, Object> getObjectAttachments() {\n-        return attachments;\n-    }\n-\n-    /**\n-     * set attachments\n-     *\n-     * @param attachment\n-     * @return context\n-     */\n-    public RpcContext setAttachments(Map<String, String> attachment) {\n-        this.attachments.clear();\n-        if (attachment != null && attachment.size() > 0) {\n-            this.attachments.putAll(attachment);\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * set attachments\n-     *\n-     * @param attachment\n-     * @return context\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    public RpcContext setObjectAttachments(Map<String, Object> attachment) {\n-        this.attachments.clear();\n-        if (attachment != null && attachment.size() > 0) {\n-            this.attachments.putAll(attachment);\n-        }\n-        return this;\n-    }\n-\n-    public void clearAttachments() {\n-        this.attachments.clear();\n-    }\n-\n-    /**\n-     * get values.\n-     *\n-     * @return values\n-     */\n-    public Map<String, Object> get() {\n-        return values;\n-    }\n-\n-    /**\n-     * set value.\n-     *\n-     * @param key\n-     * @param value\n-     * @return context\n-     */\n-    public RpcContext set(String key, Object value) {\n-        if (value == null) {\n-            values.remove(key);\n-        } else {\n-            values.put(key, value);\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * remove value.\n-     *\n-     * @param key\n-     * @return value\n-     */\n-    public RpcContext remove(String key) {\n-        values.remove(key);\n-        return this;\n-    }\n-\n-    /**\n-     * get value.\n-     *\n-     * @param key\n-     * @return value\n-     */\n-    public Object get(String key) {\n-        return values.get(key);\n-    }\n-\n-    /**\n-     * @deprecated Replace to isProviderSide()\n-     */\n-    @Deprecated\n-    public boolean isServerSide() {\n-        return isProviderSide();\n-    }\n-\n-    /**\n-     * @deprecated Replace to isConsumerSide()\n-     */\n-    @Deprecated\n-    public boolean isClientSide() {\n-        return isConsumerSide();\n-    }\n-\n-    /**\n-     * @deprecated Replace to getUrls()\n-     */\n-    @Deprecated\n-    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\n-    public List<Invoker<?>> getInvokers() {\n-        return invokers == null && invoker != null ? (List) Arrays.asList(invoker) : invokers;\n-    }\n-\n-    public RpcContext setInvokers(List<Invoker<?>> invokers) {\n-        this.invokers = invokers;\n-        if (CollectionUtils.isNotEmpty(invokers)) {\n-            List<URL> urls = new ArrayList<URL>(invokers.size());\n-            for (Invoker<?> invoker : invokers) {\n-                urls.add(invoker.getUrl());\n-            }\n-            setUrls(urls);\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * @deprecated Replace to getUrl()\n-     */\n-    @Deprecated\n-    public Invoker<?> getInvoker() {\n-        return invoker;\n-    }\n-\n-    public RpcContext setInvoker(Invoker<?> invoker) {\n-        this.invoker = invoker;\n-        if (invoker != null) {\n-            setUrl(invoker.getUrl());\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * @deprecated Replace to getMethodName(), getParameterTypes(), getArguments()\n-     */\n-    @Deprecated\n-    public Invocation getInvocation() {\n-        return invocation;\n-    }\n-\n-    public RpcContext setInvocation(Invocation invocation) {\n-        this.invocation = invocation;\n-        if (invocation != null) {\n-            setMethodName(invocation.getMethodName());\n-            setParameterTypes(invocation.getParameterTypes());\n-            setArguments(invocation.getArguments());\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * Async invocation. Timeout will be handled even if <code>Future.get()</code> is not called.\n-     *\n-     * @param callable\n-     * @return get the return result from <code>future.get()</code>\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> CompletableFuture<T> asyncCall(Callable<T> callable) {\n-        try {\n-            try {\n-                setAttachment(ASYNC_KEY, Boolean.TRUE.toString());\n-                final T o = callable.call();\n-                //local invoke will return directly\n-                if (o != null) {\n-                    if (o instanceof CompletableFuture) {\n-                        return (CompletableFuture<T>) o;\n-                    }\n-                    return CompletableFuture.completedFuture(o);\n-                } else {\n-                    // The service has a normal sync method signature, should get future from RpcContext.\n-                }\n-            } catch (Exception e) {\n-                throw new RpcException(e);\n-            } finally {\n-                removeAttachment(ASYNC_KEY);\n-            }\n-        } catch (final RpcException e) {\n-            CompletableFuture<T> exceptionFuture = new CompletableFuture<>();\n-            exceptionFuture.completeExceptionally(e);\n-            return exceptionFuture;\n-        }\n-        return ((CompletableFuture<T>) getContext().getFuture());\n-    }\n-\n-    /**\n-     * one way async call, send request only, and result is not required\n-     *\n-     * @param runnable\n-     */\n-    public void asyncCall(Runnable runnable) {\n-        try {\n-            setAttachment(RETURN_KEY, Boolean.FALSE.toString());\n-            runnable.run();\n-        } catch (Throwable e) {\n-            // FIXME should put exception in future?\n-            throw new RpcException(\"oneway call error .\" + e.getMessage(), e);\n-        } finally {\n-            removeAttachment(RETURN_KEY);\n-        }\n-    }\n-\n-    /**\n-     * @return\n-     * @throws IllegalStateException\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public static AsyncContext startAsync() throws IllegalStateException {\n-        RpcContext currentContext = getContext();\n-        if (currentContext.asyncContext == null) {\n-            currentContext.asyncContext = new AsyncContextImpl();\n-        }\n-        currentContext.asyncContext.start();\n-        return currentContext.asyncContext;\n-    }\n-\n-    protected void setAsyncContext(AsyncContext asyncContext) {\n-        this.asyncContext = asyncContext;\n-    }\n-\n-    public boolean isAsyncStarted() {\n-        if (this.asyncContext == null) {\n-            return false;\n-        }\n-        return asyncContext.isAsyncStarted();\n-    }\n-\n-    public boolean stopAsync() {\n-        return asyncContext.stop();\n-    }\n-\n-    public AsyncContext getAsyncContext() {\n-        return asyncContext;\n-    }\n-\n-    // RPC service context updated before each service call.\n-    private URL consumerUrl;\n-\n-    public String getGroup() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getParameter(GROUP_KEY);\n-    }\n-\n-    public String getVersion() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getParameter(VERSION_KEY);\n-    }\n-\n-    public String getInterfaceName() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getServiceInterface();\n-    }\n-\n-    public String getProtocol() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getParameter(PROTOCOL_KEY, DUBBO);\n-    }\n-\n-    public String getServiceKey() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getServiceKey();\n-    }\n-\n-    public String getProtocolServiceKey() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getProtocolServiceKey();\n-    }\n-\n-    public URL getConsumerUrl() {\n-        return consumerUrl;\n-    }\n-\n-    public void setConsumerUrl(URL consumerUrl) {\n-        this.consumerUrl = consumerUrl;\n-    }\n-\n-    public static void setRpcContext(URL url) {\n-        RpcContext rpcContext = RpcContext.getContext();\n-        rpcContext.setConsumerUrl(url);\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;\r\n+\r\n+import org.apache.dubbo.common.Experimental;\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.threadlocal.InternalThreadLocal;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.NetUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.net.InetSocketAddress;\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.concurrent.Callable;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.Future;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.RETURN_KEY;\r\n+\r\n+\r\n+/**\r\n+ * Thread local context. (API, ThreadLocal, ThreadSafe)\r\n+ * <p>\r\n+ * Note: RpcContext is a temporary state holder. States in RpcContext changes every time when request is sent or received.\r\n+ * For example: A invokes B, then B invokes C. On service B, RpcContext saves invocation info from A to B before B\r\n+ * starts invoking C, and saves invocation info from B to C after B invokes C.\r\n+ *\r\n+ * @export\r\n+ * @see org.apache.dubbo.rpc.filter.ContextFilter\r\n+ */\r\n+public class RpcContext {\r\n+\r\n+    /**\r\n+     * use internal thread local to improve performance\r\n+     */\r\n+    // FIXME REQUEST_CONTEXT\r\n+    private static final InternalThreadLocal<RpcContext> LOCAL = new InternalThreadLocal<RpcContext>() {\r\n+        @Override\r\n+        protected RpcContext initialValue() {\r\n+            return new RpcContext();\r\n+        }\r\n+    };\r\n+\r\n+    // FIXME RESPONSE_CONTEXT\r\n+    private static final InternalThreadLocal<RpcContext> SERVER_LOCAL = new InternalThreadLocal<RpcContext>() {\r\n+        @Override\r\n+        protected RpcContext initialValue() {\r\n+            return new RpcContext();\r\n+        }\r\n+    };\r\n+\r\n+    protected final Map<String, Object> attachments = new HashMap<>();\r\n+    private final Map<String, Object> values = new HashMap<String, Object>();\r\n+\r\n+    private List<URL> urls;\r\n+\r\n+    private URL url;\r\n+\r\n+    private String methodName;\r\n+\r\n+    private Class<?>[] parameterTypes;\r\n+\r\n+    private Object[] arguments;\r\n+\r\n+    private InetSocketAddress localAddress;\r\n+\r\n+    private InetSocketAddress remoteAddress;\r\n+\r\n+    private String remoteApplicationName;\r\n+\r\n+    @Deprecated\r\n+    private List<Invoker<?>> invokers;\r\n+    @Deprecated\r\n+    private Invoker<?> invoker;\r\n+    @Deprecated\r\n+    private Invocation invocation;\r\n+\r\n+    // now we don't use the 'values' map to hold these objects\r\n+    // we want these objects to be as generic as possible\r\n+    private Object request;\r\n+    private Object response;\r\n+    private AsyncContext asyncContext;\r\n+\r\n+    private boolean remove = true;\r\n+\r\n+\r\n+    protected RpcContext() {\r\n+    }\r\n+\r\n+    /**\r\n+     * get server side context.\r\n+     *\r\n+     * @return server context\r\n+     */\r\n+    public static RpcContext getServerContext() {\r\n+        return SERVER_LOCAL.get();\r\n+    }\r\n+\r\n+    public static void restoreServerContext(RpcContext oldServerContext) {\r\n+        SERVER_LOCAL.set(oldServerContext);\r\n+    }\r\n+\r\n+    /**\r\n+     * remove server side context.\r\n+     *\r\n+     * @see org.apache.dubbo.rpc.filter.ContextFilter\r\n+     */\r\n+    public static void removeServerContext() {\r\n+        SERVER_LOCAL.remove();\r\n+    }\r\n+\r\n+    /**\r\n+     * get context.\r\n+     *\r\n+     * @return context\r\n+     */\r\n+    public static RpcContext getContext() {\r\n+        return LOCAL.get();\r\n+    }\r\n+\r\n+    public boolean canRemove() {\r\n+        return remove;\r\n+    }\r\n+\r\n+    public void clearAfterEachInvoke(boolean remove) {\r\n+        this.remove = remove;\r\n+    }\r\n+\r\n+    public static void restoreContext(RpcContext oldContext) {\r\n+        LOCAL.set(oldContext);\r\n+    }\r\n+\r\n+    /**\r\n+     * remove context.\r\n+     *\r\n+     * @see org.apache.dubbo.rpc.filter.ContextFilter\r\n+     */\r\n+    public static void removeContext() {\r\n+        removeContext(false);\r\n+    }\r\n+\r\n+    /**\r\n+     * customized for internal use.\r\n+     *\r\n+     * @param checkCanRemove if need check before remove\r\n+     */\r\n+    public static void removeContext(boolean checkCanRemove) {\r\n+        if (LOCAL.get().canRemove()) {\r\n+            LOCAL.remove();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the request object of the underlying RPC protocol, e.g. HttpServletRequest\r\n+     *\r\n+     * @return null if the underlying protocol doesn't provide support for getting request\r\n+     */\r\n+    public Object getRequest() {\r\n+        return request;\r\n+    }\r\n+\r\n+    public void setRequest(Object request) {\r\n+        this.request = request;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the request object of the underlying RPC protocol, e.g. HttpServletRequest\r\n+     *\r\n+     * @return null if the underlying protocol doesn't provide support for getting request or the request is not of the specified type\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> T getRequest(Class<T> clazz) {\r\n+        return (request != null && clazz.isAssignableFrom(request.getClass())) ? (T) request : null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the response object of the underlying RPC protocol, e.g. HttpServletResponse\r\n+     *\r\n+     * @return null if the underlying protocol doesn't provide support for getting response\r\n+     */\r\n+    public Object getResponse() {\r\n+        return response;\r\n+    }\r\n+\r\n+    public void setResponse(Object response) {\r\n+        this.response = response;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the response object of the underlying RPC protocol, e.g. HttpServletResponse\r\n+     *\r\n+     * @return null if the underlying protocol doesn't provide support for getting response or the response is not of the specified type\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> T getResponse(Class<T> clazz) {\r\n+        return (response != null && clazz.isAssignableFrom(response.getClass())) ? (T) response : null;\r\n+    }\r\n+\r\n+    /**\r\n+     * is provider side.\r\n+     *\r\n+     * @return provider side.\r\n+     */\r\n+    public boolean isProviderSide() {\r\n+        return !isConsumerSide();\r\n+    }\r\n+\r\n+    /**\r\n+     * is consumer side.\r\n+     *\r\n+     * @return consumer side.\r\n+     */\r\n+    public boolean isConsumerSide() {\r\n+        return getUrl().getParameter(SIDE_KEY, PROVIDER_SIDE).equals(CONSUMER_SIDE);\r\n+    }\r\n+\r\n+    /**\r\n+     * get CompletableFuture.\r\n+     *\r\n+     * @param <T>\r\n+     * @return future\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> CompletableFuture<T> getCompletableFuture() {\r\n+        return FutureContext.getContext().getCompletableFuture();\r\n+    }\r\n+\r\n+    /**\r\n+     * get future.\r\n+     *\r\n+     * @param <T>\r\n+     * @return future\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> Future<T> getFuture() {\r\n+        return FutureContext.getContext().getCompletableFuture();\r\n+    }\r\n+\r\n+    /**\r\n+     * set future.\r\n+     *\r\n+     * @param future\r\n+     */\r\n+    public void setFuture(CompletableFuture<?> future) {\r\n+        FutureContext.getContext().setFuture(future);\r\n+    }\r\n+\r\n+    public List<URL> getUrls() {\r\n+        return urls == null && url != null ? (List<URL>) Arrays.asList(url) : urls;\r\n+    }\r\n+\r\n+    public void setUrls(List<URL> urls) {\r\n+        this.urls = urls;\r\n+    }\r\n+\r\n+    public URL getUrl() {\r\n+        return url;\r\n+    }\r\n+\r\n+    public void setUrl(URL url) {\r\n+        this.url = url;\r\n+    }\r\n+\r\n+    /**\r\n+     * get method name.\r\n+     *\r\n+     * @return method name.\r\n+     */\r\n+    public String getMethodName() {\r\n+        return methodName;\r\n+    }\r\n+\r\n+    public void setMethodName(String methodName) {\r\n+        this.methodName = methodName;\r\n+    }\r\n+\r\n+    /**\r\n+     * get parameter types.\r\n+     *\r\n+     * @serial\r\n+     */\r\n+    public Class<?>[] getParameterTypes() {\r\n+        return parameterTypes;\r\n+    }\r\n+\r\n+    public void setParameterTypes(Class<?>[] parameterTypes) {\r\n+        this.parameterTypes = parameterTypes;\r\n+    }\r\n+\r\n+    /**\r\n+     * get arguments.\r\n+     *\r\n+     * @return arguments.\r\n+     */\r\n+    public Object[] getArguments() {\r\n+        return arguments;\r\n+    }\r\n+\r\n+    public void setArguments(Object[] arguments) {\r\n+        this.arguments = arguments;\r\n+    }\r\n+\r\n+    /**\r\n+     * set local address.\r\n+     *\r\n+     * @param host\r\n+     * @param port\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setLocalAddress(String host, int port) {\r\n+        if (port < 0) {\r\n+            port = 0;\r\n+        }\r\n+        this.localAddress = InetSocketAddress.createUnresolved(host, port);\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get local address.\r\n+     *\r\n+     * @return local address\r\n+     */\r\n+    public InetSocketAddress getLocalAddress() {\r\n+        return localAddress;\r\n+    }\r\n+\r\n+    /**\r\n+     * set local address.\r\n+     *\r\n+     * @param address\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setLocalAddress(InetSocketAddress address) {\r\n+        this.localAddress = address;\r\n+        return this;\r\n+    }\r\n+\r\n+    public String getLocalAddressString() {\r\n+        return getLocalHost() + \":\" + getLocalPort();\r\n+    }\r\n+\r\n+    /**\r\n+     * get local host name.\r\n+     *\r\n+     * @return local host name\r\n+     */\r\n+    public String getLocalHostName() {\r\n+        String host = localAddress == null ? null : localAddress.getHostName();\r\n+        if (StringUtils.isEmpty(host)) {\r\n+            return getLocalHost();\r\n+        }\r\n+        return host;\r\n+    }\r\n+\r\n+    /**\r\n+     * set remote address.\r\n+     *\r\n+     * @param host\r\n+     * @param port\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setRemoteAddress(String host, int port) {\r\n+        if (port < 0) {\r\n+            port = 0;\r\n+        }\r\n+        this.remoteAddress = InetSocketAddress.createUnresolved(host, port);\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote address.\r\n+     *\r\n+     * @return remote address\r\n+     */\r\n+    public InetSocketAddress getRemoteAddress() {\r\n+        return remoteAddress;\r\n+    }\r\n+\r\n+    /**\r\n+     * set remote address.\r\n+     *\r\n+     * @param address\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setRemoteAddress(InetSocketAddress address) {\r\n+        this.remoteAddress = address;\r\n+        return this;\r\n+    }\r\n+\r\n+    public String getRemoteApplicationName() {\r\n+        return remoteApplicationName;\r\n+    }\r\n+\r\n+    public RpcContext setRemoteApplicationName(String remoteApplicationName) {\r\n+        this.remoteApplicationName = remoteApplicationName;\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote address string.\r\n+     *\r\n+     * @return remote address string.\r\n+     */\r\n+    public String getRemoteAddressString() {\r\n+        return getRemoteHost() + \":\" + getRemotePort();\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote host name.\r\n+     *\r\n+     * @return remote host name\r\n+     */\r\n+    public String getRemoteHostName() {\r\n+        return remoteAddress == null ? null : remoteAddress.getHostName();\r\n+    }\r\n+\r\n+    /**\r\n+     * get local host.\r\n+     *\r\n+     * @return local host\r\n+     */\r\n+    public String getLocalHost() {\r\n+        String host = localAddress == null ? null :\r\n+                localAddress.getAddress() == null ? localAddress.getHostName()\r\n+                        : NetUtils.filterLocalHost(localAddress.getAddress().getHostAddress());\r\n+        if (host == null || host.length() == 0) {\r\n+            return NetUtils.getLocalHost();\r\n+        }\r\n+        return host;\r\n+    }\r\n+\r\n+    /**\r\n+     * get local port.\r\n+     *\r\n+     * @return port\r\n+     */\r\n+    public int getLocalPort() {\r\n+        return localAddress == null ? 0 : localAddress.getPort();\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote host.\r\n+     *\r\n+     * @return remote host\r\n+     */\r\n+    public String getRemoteHost() {\r\n+        return remoteAddress == null ? null :\r\n+                remoteAddress.getAddress() == null ? remoteAddress.getHostName()\r\n+                        : NetUtils.filterLocalHost(remoteAddress.getAddress().getHostAddress());\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote port.\r\n+     *\r\n+     * @return remote port\r\n+     */\r\n+    public int getRemotePort() {\r\n+        return remoteAddress == null ? 0 : remoteAddress.getPort();\r\n+    }\r\n+\r\n+    /**\r\n+     * also see {@link #getObjectAttachment(String)}.\r\n+     *\r\n+     * @param key\r\n+     * @return attachment\r\n+     */\r\n+    public String getAttachment(String key) {\r\n+        Object value = attachments.get(key);\r\n+        if (value instanceof String) {\r\n+            return (String) value;\r\n+        }\r\n+        return null; // or JSON.toString(value);\r\n+    }\r\n+\r\n+    /**\r\n+     * get attachment.\r\n+     *\r\n+     * @param key\r\n+     * @return attachment\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    public Object getObjectAttachment(String key) {\r\n+        return attachments.get(key);\r\n+    }\r\n+\r\n+    /**\r\n+     * set attachment.\r\n+     *\r\n+     * @param key\r\n+     * @param value\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setAttachment(String key, String value) {\r\n+        return setObjectAttachment(key, (Object) value);\r\n+    }\r\n+\r\n+    public RpcContext setAttachment(String key, Object value) {\r\n+        return setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    public RpcContext setObjectAttachment(String key, Object value) {\r\n+        if (value == null) {\r\n+            attachments.remove(key);\r\n+        } else {\r\n+            attachments.put(key, value);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * remove attachment.\r\n+     *\r\n+     * @param key\r\n+     * @return context\r\n+     */\r\n+    public RpcContext removeAttachment(String key) {\r\n+        attachments.remove(key);\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments\r\n+     */\r\n+    @Deprecated\r\n+    public Map<String, String> getAttachments() {\r\n+        return new AttachmentsAdapter.ObjectToStringMap(this.getObjectAttachments());\r\n+    }\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    public Map<String, Object> getObjectAttachments() {\r\n+        return attachments;\r\n+    }\r\n+\r\n+    /**\r\n+     * set attachments\r\n+     *\r\n+     * @param attachment\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setAttachments(Map<String, String> attachment) {\r\n+        this.attachments.clear();\r\n+        if (attachment != null && attachment.size() > 0) {\r\n+            this.attachments.putAll(attachment);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * set attachments\r\n+     *\r\n+     * @param attachment\r\n+     * @return context\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    public RpcContext setObjectAttachments(Map<String, Object> attachment) {\r\n+        this.attachments.clear();\r\n+        if (attachment != null && attachment.size() > 0) {\r\n+            this.attachments.putAll(attachment);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    public void clearAttachments() {\r\n+        this.attachments.clear();\r\n+    }\r\n+\r\n+    /**\r\n+     * get values.\r\n+     *\r\n+     * @return values\r\n+     */\r\n+    public Map<String, Object> get() {\r\n+        return values;\r\n+    }\r\n+\r\n+    /**\r\n+     * set value.\r\n+     *\r\n+     * @param key\r\n+     * @param value\r\n+     * @return context\r\n+     */\r\n+    public RpcContext set(String key, Object value) {\r\n+        if (value == null) {\r\n+            values.remove(key);\r\n+        } else {\r\n+            values.put(key, value);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * remove value.\r\n+     *\r\n+     * @param key\r\n+     * @return value\r\n+     */\r\n+    public RpcContext remove(String key) {\r\n+        values.remove(key);\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get value.\r\n+     *\r\n+     * @param key\r\n+     * @return value\r\n+     */\r\n+    public Object get(String key) {\r\n+        return values.get(key);\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to isProviderSide()\r\n+     */\r\n+    @Deprecated\r\n+    public boolean isServerSide() {\r\n+        return isProviderSide();\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to isConsumerSide()\r\n+     */\r\n+    @Deprecated\r\n+    public boolean isClientSide() {\r\n+        return isConsumerSide();\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to getUrls()\r\n+     */\r\n+    @Deprecated\r\n+    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\r\n+    public List<Invoker<?>> getInvokers() {\r\n+        return invokers == null && invoker != null ? (List) Arrays.asList(invoker) : invokers;\r\n+    }\r\n+\r\n+    public RpcContext setInvokers(List<Invoker<?>> invokers) {\r\n+        this.invokers = invokers;\r\n+        if (CollectionUtils.isNotEmpty(invokers)) {\r\n+            List<URL> urls = new ArrayList<URL>(invokers.size());\r\n+            for (Invoker<?> invoker : invokers) {\r\n+                urls.add(invoker.getUrl());\r\n+            }\r\n+            setUrls(urls);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to getUrl()\r\n+     */\r\n+    @Deprecated\r\n+    public Invoker<?> getInvoker() {\r\n+        return invoker;\r\n+    }\r\n+\r\n+    public RpcContext setInvoker(Invoker<?> invoker) {\r\n+        this.invoker = invoker;\r\n+        if (invoker != null) {\r\n+            setUrl(invoker.getUrl());\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to getMethodName(), getParameterTypes(), getArguments()\r\n+     */\r\n+    @Deprecated\r\n+    public Invocation getInvocation() {\r\n+        return invocation;\r\n+    }\r\n+\r\n+    public RpcContext setInvocation(Invocation invocation) {\r\n+        this.invocation = invocation;\r\n+        if (invocation != null) {\r\n+            setMethodName(invocation.getMethodName());\r\n+            setParameterTypes(invocation.getParameterTypes());\r\n+            setArguments(invocation.getArguments());\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * Async invocation. Timeout will be handled even if <code>Future.get()</code> is not called.\r\n+     *\r\n+     * @param callable\r\n+     * @return get the return result from <code>future.get()</code>\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> CompletableFuture<T> asyncCall(Callable<T> callable) {\r\n+        try {\r\n+            try {\r\n+                setAttachment(ASYNC_KEY, Boolean.TRUE.toString());\r\n+                final T o = callable.call();\r\n+                //local invoke will return directly\r\n+                if (o != null) {\r\n+                    if (o instanceof CompletableFuture) {\r\n+                        return (CompletableFuture<T>) o;\r\n+                    }\r\n+                    return CompletableFuture.completedFuture(o);\r\n+                } else {\r\n+                    // The service has a normal sync method signature, should get future from RpcContext.\r\n+                }\r\n+            } catch (Exception e) {\r\n+                throw new RpcException(e);\r\n+            } finally {\r\n+                removeAttachment(ASYNC_KEY);\r\n+            }\r\n+        } catch (final RpcException e) {\r\n+            CompletableFuture<T> exceptionFuture = new CompletableFuture<>();\r\n+            exceptionFuture.completeExceptionally(e);\r\n+            return exceptionFuture;\r\n+        }\r\n+        return ((CompletableFuture<T>) getContext().getFuture());\r\n+    }\r\n+\r\n+    /**\r\n+     * one way async call, send request only, and result is not required\r\n+     *\r\n+     * @param runnable\r\n+     */\r\n+    public void asyncCall(Runnable runnable) {\r\n+        try {\r\n+            setAttachment(RETURN_KEY, Boolean.FALSE.toString());\r\n+            runnable.run();\r\n+        } catch (Throwable e) {\r\n+            // FIXME should put exception in future?\r\n+            throw new RpcException(\"oneway call error .\" + e.getMessage(), e);\r\n+        } finally {\r\n+            removeAttachment(RETURN_KEY);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * @return\r\n+     * @throws IllegalStateException\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public static AsyncContext startAsync() throws IllegalStateException {\r\n+        RpcContext currentContext = getContext();\r\n+        if (currentContext.asyncContext == null) {\r\n+            currentContext.asyncContext = new AsyncContextImpl();\r\n+        }\r\n+        currentContext.asyncContext.start();\r\n+        return currentContext.asyncContext;\r\n+    }\r\n+\r\n+    protected void setAsyncContext(AsyncContext asyncContext) {\r\n+        this.asyncContext = asyncContext;\r\n+    }\r\n+\r\n+    public boolean isAsyncStarted() {\r\n+        if (this.asyncContext == null) {\r\n+            return false;\r\n+        }\r\n+        return asyncContext.isAsyncStarted();\r\n+    }\r\n+\r\n+    public boolean stopAsync() {\r\n+        return asyncContext.stop();\r\n+    }\r\n+\r\n+    public AsyncContext getAsyncContext() {\r\n+        return asyncContext;\r\n+    }\r\n+\r\n+    // RPC service context updated before each service call.\r\n+    private URL consumerUrl;\r\n+\r\n+    public String getGroup() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getParameter(GROUP_KEY);\r\n+    }\r\n+\r\n+    public String getVersion() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getParameter(VERSION_KEY);\r\n+    }\r\n+\r\n+    public String getInterfaceName() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getServiceInterface();\r\n+    }\r\n+\r\n+    public String getProtocol() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getParameter(PROTOCOL_KEY, DUBBO);\r\n+    }\r\n+\r\n+    public String getServiceKey() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getServiceKey();\r\n+    }\r\n+\r\n+    public String getProtocolServiceKey() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getProtocolServiceKey();\r\n+    }\r\n+\r\n+    public URL getConsumerUrl() {\r\n+        return consumerUrl;\r\n+    }\r\n+\r\n+    public void setConsumerUrl(URL consumerUrl) {\r\n+        this.consumerUrl = consumerUrl;\r\n+    }\r\n+\r\n+    public static void setRpcContext(URL url) {\r\n+        RpcContext rpcContext = RpcContext.getContext();\r\n+        rpcContext.setConsumerUrl(url);\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/RpcException.java", "source2": "org/apache/dubbo/rpc/RpcException.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,117 +1,117 @@\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;\n-\n-import javax.naming.LimitExceededException;\n-\n-/**\n- * RPC Exception. (API, Prototype, ThreadSafe)\n- *\n- * @serial Don't change the class name and properties.\n- * @export\n- * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\n- * @since 1.0\n- */\n-public /**final**/ class RpcException extends RuntimeException {\n-\n-    public static final int UNKNOWN_EXCEPTION = 0;\n-    public static final int NETWORK_EXCEPTION = 1;\n-    public static final int TIMEOUT_EXCEPTION = 2;\n-    public static final int BIZ_EXCEPTION = 3;\n-    public static final int FORBIDDEN_EXCEPTION = 4;\n-    public static final int SERIALIZATION_EXCEPTION = 5;\n-    public static final int NO_INVOKER_AVAILABLE_AFTER_FILTER = 6;\n-    public static final int LIMIT_EXCEEDED_EXCEPTION = 7;\n-    public static final int TIMEOUT_TERMINATE = 8;\n-    private static final long serialVersionUID = 7815426752583648734L;\n-    /**\n-     * RpcException cannot be extended, use error code for exception type to keep compatibility\n-     */\n-    private int code;\n-\n-    public RpcException() {\n-        super();\n-    }\n-\n-    public RpcException(String message, Throwable cause) {\n-        super(message, cause);\n-    }\n-\n-    public RpcException(String message) {\n-        super(message);\n-    }\n-\n-    public RpcException(Throwable cause) {\n-        super(cause);\n-    }\n-\n-    public RpcException(int code) {\n-        super();\n-        this.code = code;\n-    }\n-\n-    public RpcException(int code, String message, Throwable cause) {\n-        super(message, cause);\n-        this.code = code;\n-    }\n-\n-    public RpcException(int code, String message) {\n-        super(message);\n-        this.code = code;\n-    }\n-\n-    public RpcException(int code, Throwable cause) {\n-        super(cause);\n-        this.code = code;\n-    }\n-\n-    public int getCode() {\n-        return code;\n-    }\n-\n-    public void setCode(int code) {\n-        this.code = code;\n-    }\n-\n-    public boolean isBiz() {\n-        return code == BIZ_EXCEPTION;\n-    }\n-\n-    public boolean isForbidden() {\n-        return code == FORBIDDEN_EXCEPTION;\n-    }\n-\n-    public boolean isTimeout() {\n-        return code == TIMEOUT_EXCEPTION;\n-    }\n-\n-    public boolean isNetwork() {\n-        return code == NETWORK_EXCEPTION;\n-    }\n-\n-    public boolean isSerialization() {\n-        return code == SERIALIZATION_EXCEPTION;\n-    }\n-\n-    public boolean isNoInvokerAvailableAfterFilter() {\n-        return code == NO_INVOKER_AVAILABLE_AFTER_FILTER;\n-    }\n-\n-    public boolean isLimitExceed() {\n-        return code == LIMIT_EXCEEDED_EXCEPTION || getCause() instanceof LimitExceededException;\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;\r\n+\r\n+import javax.naming.LimitExceededException;\r\n+\r\n+/**\r\n+ * RPC Exception. (API, Prototype, ThreadSafe)\r\n+ *\r\n+ * @serial Don't change the class name and properties.\r\n+ * @export\r\n+ * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\r\n+ * @since 1.0\r\n+ */\r\n+public /**final**/ class RpcException extends RuntimeException {\r\n+\r\n+    public static final int UNKNOWN_EXCEPTION = 0;\r\n+    public static final int NETWORK_EXCEPTION = 1;\r\n+    public static final int TIMEOUT_EXCEPTION = 2;\r\n+    public static final int BIZ_EXCEPTION = 3;\r\n+    public static final int FORBIDDEN_EXCEPTION = 4;\r\n+    public static final int SERIALIZATION_EXCEPTION = 5;\r\n+    public static final int NO_INVOKER_AVAILABLE_AFTER_FILTER = 6;\r\n+    public static final int LIMIT_EXCEEDED_EXCEPTION = 7;\r\n+    public static final int TIMEOUT_TERMINATE = 8;\r\n+    private static final long serialVersionUID = 7815426752583648734L;\r\n+    /**\r\n+     * RpcException cannot be extended, use error code for exception type to keep compatibility\r\n+     */\r\n+    private int code;\r\n+\r\n+    public RpcException() {\r\n+        super();\r\n+    }\r\n+\r\n+    public RpcException(String message, Throwable cause) {\r\n+        super(message, cause);\r\n+    }\r\n+\r\n+    public RpcException(String message) {\r\n+        super(message);\r\n+    }\r\n+\r\n+    public RpcException(Throwable cause) {\r\n+        super(cause);\r\n+    }\r\n+\r\n+    public RpcException(int code) {\r\n+        super();\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public RpcException(int code, String message, Throwable cause) {\r\n+        super(message, cause);\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public RpcException(int code, String message) {\r\n+        super(message);\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public RpcException(int code, Throwable cause) {\r\n+        super(cause);\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public int getCode() {\r\n+        return code;\r\n+    }\r\n+\r\n+    public void setCode(int code) {\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public boolean isBiz() {\r\n+        return code == BIZ_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isForbidden() {\r\n+        return code == FORBIDDEN_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isTimeout() {\r\n+        return code == TIMEOUT_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isNetwork() {\r\n+        return code == NETWORK_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isSerialization() {\r\n+        return code == SERIALIZATION_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isNoInvokerAvailableAfterFilter() {\r\n+        return code == NO_INVOKER_AVAILABLE_AFTER_FILTER;\r\n+    }\r\n+\r\n+    public boolean isLimitExceed() {\r\n+        return code == LIMIT_EXCEEDED_EXCEPTION || getCause() instanceof LimitExceededException;\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/RpcInvocation.java", "source2": "org/apache/dubbo/rpc/RpcInvocation.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,441 +1,441 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.MethodDescriptor;\n-import org.apache.dubbo.rpc.model.ServiceDescriptor;\n-import org.apache.dubbo.rpc.model.ServiceRepository;\n-import org.apache.dubbo.rpc.support.RpcUtils;\n-\n-import java.io.Serializable;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.Arrays;\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.stream.Stream;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\n-\n-/**\n- * RPC Invocation.\n- *\n- * @serial Don't change the class name and properties.\n- */\n-public class RpcInvocation implements Invocation, Serializable {\n-\n-    private static final long serialVersionUID = -4355285085441097045L;\n-\n-    private String targetServiceUniqueName;\n-    private String protocolServiceKey;\n-\n-    private String methodName;\n-    private String serviceName;\n-\n-    private transient Class<?>[] parameterTypes;\n-    private String parameterTypesDesc;\n-    private String[] compatibleParamSignatures;\n-\n-    private Object[] arguments;\n-\n-    /**\n-     * Passed to the remote server during RPC call\n-     */\n-    private Map<String, Object> attachments;\n-\n-    /**\n-     * Only used on the caller side, will not appear on the wire.\n-     */\n-    private Map<Object, Object> attributes = new HashMap<>();\n-\n-    private transient Invoker<?> invoker;\n-\n-    private transient Class<?> returnType;\n-\n-    private transient Type[] returnTypes;\n-\n-    private transient InvokeMode invokeMode;\n-\n-    public RpcInvocation() {\n-    }\n-\n-    public RpcInvocation(Invocation invocation, Invoker<?> invoker) {\n-        this(invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(),\n-                invocation.getParameterTypes(), invocation.getArguments(), new HashMap<>(invocation.getObjectAttachments()),\n-                invocation.getInvoker(), invocation.getAttributes());\n-        if (invoker != null) {\n-            URL url = invoker.getUrl();\n-            setAttachment(PATH_KEY, url.getPath());\n-            if (url.hasParameter(INTERFACE_KEY)) {\n-                setAttachment(INTERFACE_KEY, url.getParameter(INTERFACE_KEY));\n-            }\n-            if (url.hasParameter(GROUP_KEY)) {\n-                setAttachment(GROUP_KEY, url.getParameter(GROUP_KEY));\n-            }\n-            if (url.hasParameter(VERSION_KEY)) {\n-                setAttachment(VERSION_KEY, url.getParameter(VERSION_KEY, \"0.0.0\"));\n-            }\n-            if (url.hasParameter(TIMEOUT_KEY)) {\n-                setAttachment(TIMEOUT_KEY, url.getParameter(TIMEOUT_KEY));\n-            }\n-            if (url.hasParameter(TOKEN_KEY)) {\n-                setAttachment(TOKEN_KEY, url.getParameter(TOKEN_KEY));\n-            }\n-            if (url.hasParameter(APPLICATION_KEY)) {\n-                setAttachment(APPLICATION_KEY, url.getParameter(APPLICATION_KEY));\n-            }\n-        }\n-        this.targetServiceUniqueName = invocation.getTargetServiceUniqueName();\n-        this.protocolServiceKey = invocation.getProtocolServiceKey();\n-    }\n-\n-    public RpcInvocation(Invocation invocation) {\n-        this(invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(), invocation.getParameterTypes(),\n-                invocation.getArguments(), invocation.getObjectAttachments(), invocation.getInvoker(), invocation.getAttributes());\n-        this.targetServiceUniqueName = invocation.getTargetServiceUniqueName();\n-    }\n-\n-    public RpcInvocation(Method method, String serviceName, String protocolServiceKey, Object[] arguments) {\n-        this(method, serviceName, protocolServiceKey, arguments, null, null);\n-    }\n-\n-    public RpcInvocation(Method method, String serviceName, String protocolServiceKey, Object[] arguments, Map<String, Object> attachment, Map<Object, Object> attributes) {\n-        this(method.getName(), serviceName, protocolServiceKey, method.getParameterTypes(), arguments, attachment, null, attributes);\n-        this.returnType = method.getReturnType();\n-    }\n-\n-    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments) {\n-        this(methodName, serviceName, protocolServiceKey, parameterTypes, arguments, null, null, null);\n-    }\n-\n-    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments, Map<String, Object> attachments) {\n-        this(methodName, serviceName, protocolServiceKey, parameterTypes, arguments, attachments, null, null);\n-    }\n-\n-    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments,\n-                         Map<String, Object> attachments, Invoker<?> invoker, Map<Object, Object> attributes) {\n-        this.methodName = methodName;\n-        this.serviceName = serviceName;\n-        this.protocolServiceKey = protocolServiceKey;\n-        this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;\n-        this.arguments = arguments == null ? new Object[0] : arguments;\n-        this.attachments = attachments == null ? new HashMap<>() : attachments;\n-        this.attributes = attributes == null ? new HashMap<>() : attributes;\n-        this.invoker = invoker;\n-        initParameterDesc();\n-    }\n-\n-    private void initParameterDesc() {\n-        ServiceRepository repository = ApplicationModel.getServiceRepository();\n-        if (StringUtils.isNotEmpty(serviceName)) {\n-            ServiceDescriptor serviceDescriptor = repository.lookupService(serviceName);\n-            if (serviceDescriptor != null) {\n-                MethodDescriptor methodDescriptor = serviceDescriptor.getMethod(methodName, parameterTypes);\n-                if (methodDescriptor != null) {\n-                    this.parameterTypesDesc = methodDescriptor.getParamDesc();\n-                    this.compatibleParamSignatures = methodDescriptor.getCompatibleParamSignatures();\n-                    this.returnTypes = methodDescriptor.getReturnTypes();\n-                }\n-            }\n-        }\n-\n-        if (parameterTypesDesc == null) {\n-            this.parameterTypesDesc = ReflectUtils.getDesc(this.getParameterTypes());\n-            this.compatibleParamSignatures = Stream.of(this.parameterTypes).map(Class::getName).toArray(String[]::new);\n-            this.returnTypes = RpcUtils.getReturnTypes(this);\n-        }\n-    }\n-\n-    @Override\n-    public Invoker<?> getInvoker() {\n-        return invoker;\n-    }\n-\n-    public void setInvoker(Invoker<?> invoker) {\n-        this.invoker = invoker;\n-    }\n-\n-    public Object put(Object key, Object value) {\n-        return attributes.put(key, value);\n-    }\n-\n-    public Object get(Object key) {\n-        return attributes.get(key);\n-    }\n-\n-    @Override\n-    public Map<Object, Object> getAttributes() {\n-        return attributes;\n-    }\n-\n-    @Override\n-    public String getTargetServiceUniqueName() {\n-        return targetServiceUniqueName;\n-    }\n-\n-    @Override\n-    public String getProtocolServiceKey() {\n-        return protocolServiceKey;\n-    }\n-\n-    public void setTargetServiceUniqueName(String targetServiceUniqueName) {\n-        this.targetServiceUniqueName = targetServiceUniqueName;\n-    }\n-\n-    @Override\n-    public String getMethodName() {\n-        return methodName;\n-    }\n-\n-    @Override\n-    public String getServiceName() {\n-        return serviceName;\n-    }\n-\n-    public void setServiceName(String serviceName) {\n-        this.serviceName = serviceName;\n-    }\n-\n-    public void setMethodName(String methodName) {\n-        this.methodName = methodName;\n-    }\n-\n-    @Override\n-    public Class<?>[] getParameterTypes() {\n-        return parameterTypes;\n-    }\n-\n-    public void setParameterTypes(Class<?>[] parameterTypes) {\n-        this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;\n-    }\n-\n-    public String getParameterTypesDesc() {\n-        return parameterTypesDesc;\n-    }\n-\n-    public void setParameterTypesDesc(String parameterTypesDesc) {\n-        this.parameterTypesDesc = parameterTypesDesc;\n-    }\n-\n-    public String[] getCompatibleParamSignatures() {\n-        return compatibleParamSignatures;\n-    }\n-\n-    // parameter signatures can be set independently, it is useful when the service type is not found on caller side and\n-    // the invocation is not generic invocation either.\n-    public void setCompatibleParamSignatures(String[] compatibleParamSignatures) {\n-        this.compatibleParamSignatures = compatibleParamSignatures;\n-    }\n-\n-    @Override\n-    public Object[] getArguments() {\n-        return arguments;\n-    }\n-\n-    public void setArguments(Object[] arguments) {\n-        this.arguments = arguments == null ? new Object[0] : arguments;\n-    }\n-\n-    @Override\n-    public Map<String, Object> getObjectAttachments() {\n-        return attachments;\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, String value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Deprecated\n-    @Override\n-    public Map<String, String> getAttachments() {\n-        return new AttachmentsAdapter.ObjectToStringMap(attachments);\n-    }\n-\n-    @Deprecated\n-    public void setAttachments(Map<String, String> attachments) {\n-        this.attachments = attachments == null ? new HashMap<>() : new HashMap<>(attachments);\n-    }\n-\n-    public void setObjectAttachments(Map<String, Object> attachments) {\n-        this.attachments = attachments == null ? new HashMap<>() : attachments;\n-    }\n-\n-    public void setAttachment(String key, Object value) {\n-       setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setObjectAttachment(String key, Object value) {\n-        if (attachments == null) {\n-            attachments = new HashMap<>();\n-        }\n-        attachments.put(key, value);\n-    }\n-\n-    @Override\n-    public void setAttachmentIfAbsent(String key, String value) {\n-        setObjectAttachmentIfAbsent(key, value);\n-    }\n-\n-    public void setAttachmentIfAbsent(String key, Object value) {\n-        setObjectAttachmentIfAbsent(key, value);\n-    }\n-\n-    @Override\n-    public void setObjectAttachmentIfAbsent(String key, Object value) {\n-        if (attachments == null) {\n-            attachments = new HashMap<>();\n-        }\n-        if (!attachments.containsKey(key)) {\n-            attachments.put(key, value);\n-        }\n-    }\n-\n-    @Deprecated\n-    public void addAttachments(Map<String, String> attachments) {\n-        if (attachments == null) {\n-            return;\n-        }\n-        if (this.attachments == null) {\n-            this.attachments = new HashMap<>();\n-        }\n-        this.attachments.putAll(attachments);\n-    }\n-\n-    public void addObjectAttachments(Map<String, Object> attachments) {\n-        if (attachments == null) {\n-            return;\n-        }\n-        if (this.attachments == null) {\n-            this.attachments = new HashMap<>();\n-        }\n-        this.attachments.putAll(attachments);\n-    }\n-\n-    @Deprecated\n-    public void addAttachmentsIfAbsent(Map<String, String> attachments) {\n-        if (attachments == null) {\n-            return;\n-        }\n-        for (Map.Entry<String, String> entry : attachments.entrySet()) {\n-            setAttachmentIfAbsent(entry.getKey(), entry.getValue());\n-        }\n-    }\n-\n-    public void addObjectAttachmentsIfAbsent(Map<String, Object> attachments) {\n-        if (attachments == null) {\n-            return;\n-        }\n-        for (Map.Entry<String, Object> entry : attachments.entrySet()) {\n-            setAttachmentIfAbsent(entry.getKey(), entry.getValue());\n-        }\n-    }\n-\n-    @Override\n-    @Deprecated\n-    public String getAttachment(String key) {\n-        if (attachments == null) {\n-            return null;\n-        }\n-        Object value = attachments.get(key);\n-        if (value instanceof String) {\n-            return (String) value;\n-        }\n-        return null;\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key) {\n-        if (attachments == null) {\n-            return null;\n-        }\n-        return attachments.get(key);\n-    }\n-\n-    @Override\n-    @Deprecated\n-    public String getAttachment(String key, String defaultValue) {\n-        if (attachments == null) {\n-            return defaultValue;\n-        }\n-        Object value = attachments.get(key);\n-        if (value instanceof String) {\n-            String strValue = (String) value;\n-            if (StringUtils.isEmpty(strValue)) {\n-                return defaultValue;\n-            } else {\n-                return strValue;\n-            }\n-        }\n-        return null;\n-    }\n-\n-    @Deprecated\n-    public Object getObjectAttachment(String key, Object defaultValue) {\n-        if (attachments == null) {\n-            return defaultValue;\n-        }\n-        Object value = attachments.get(key);\n-        if (value == null) {\n-            return defaultValue;\n-        }\n-        return value;\n-    }\n-\n-    public Class<?> getReturnType() {\n-        return returnType;\n-    }\n-\n-    public void setReturnType(Class<?> returnType) {\n-        this.returnType = returnType;\n-    }\n-\n-    public Type[] getReturnTypes() {\n-        return returnTypes;\n-    }\n-\n-    public void setReturnTypes(Type[] returnTypes) {\n-        this.returnTypes = returnTypes;\n-    }\n-\n-    public InvokeMode getInvokeMode() {\n-        return invokeMode;\n-    }\n-\n-    public void setInvokeMode(InvokeMode invokeMode) {\n-        this.invokeMode = invokeMode;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"RpcInvocation [methodName=\" + methodName + \", parameterTypes=\"\n-                + Arrays.toString(parameterTypes) + \", arguments=\" + Arrays.toString(arguments)\n-                + \", attachments=\" + attachments + \"]\";\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.MethodDescriptor;\r\n+import org.apache.dubbo.rpc.model.ServiceDescriptor;\r\n+import org.apache.dubbo.rpc.model.ServiceRepository;\r\n+import org.apache.dubbo.rpc.support.RpcUtils;\r\n+\r\n+import java.io.Serializable;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Arrays;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\r\n+\r\n+/**\r\n+ * RPC Invocation.\r\n+ *\r\n+ * @serial Don't change the class name and properties.\r\n+ */\r\n+public class RpcInvocation implements Invocation, Serializable {\r\n+\r\n+    private static final long serialVersionUID = -4355285085441097045L;\r\n+\r\n+    private String targetServiceUniqueName;\r\n+    private String protocolServiceKey;\r\n+\r\n+    private String methodName;\r\n+    private String serviceName;\r\n+\r\n+    private transient Class<?>[] parameterTypes;\r\n+    private String parameterTypesDesc;\r\n+    private String[] compatibleParamSignatures;\r\n+\r\n+    private Object[] arguments;\r\n+\r\n+    /**\r\n+     * Passed to the remote server during RPC call\r\n+     */\r\n+    private Map<String, Object> attachments;\r\n+\r\n+    /**\r\n+     * Only used on the caller side, will not appear on the wire.\r\n+     */\r\n+    private Map<Object, Object> attributes = new HashMap<>();\r\n+\r\n+    private transient Invoker<?> invoker;\r\n+\r\n+    private transient Class<?> returnType;\r\n+\r\n+    private transient Type[] returnTypes;\r\n+\r\n+    private transient InvokeMode invokeMode;\r\n+\r\n+    public RpcInvocation() {\r\n+    }\r\n+\r\n+    public RpcInvocation(Invocation invocation, Invoker<?> invoker) {\r\n+        this(invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(),\r\n+                invocation.getParameterTypes(), invocation.getArguments(), new HashMap<>(invocation.getObjectAttachments()),\r\n+                invocation.getInvoker(), invocation.getAttributes());\r\n+        if (invoker != null) {\r\n+            URL url = invoker.getUrl();\r\n+            setAttachment(PATH_KEY, url.getPath());\r\n+            if (url.hasParameter(INTERFACE_KEY)) {\r\n+                setAttachment(INTERFACE_KEY, url.getParameter(INTERFACE_KEY));\r\n+            }\r\n+            if (url.hasParameter(GROUP_KEY)) {\r\n+                setAttachment(GROUP_KEY, url.getParameter(GROUP_KEY));\r\n+            }\r\n+            if (url.hasParameter(VERSION_KEY)) {\r\n+                setAttachment(VERSION_KEY, url.getParameter(VERSION_KEY, \"0.0.0\"));\r\n+            }\r\n+            if (url.hasParameter(TIMEOUT_KEY)) {\r\n+                setAttachment(TIMEOUT_KEY, url.getParameter(TIMEOUT_KEY));\r\n+            }\r\n+            if (url.hasParameter(TOKEN_KEY)) {\r\n+                setAttachment(TOKEN_KEY, url.getParameter(TOKEN_KEY));\r\n+            }\r\n+            if (url.hasParameter(APPLICATION_KEY)) {\r\n+                setAttachment(APPLICATION_KEY, url.getParameter(APPLICATION_KEY));\r\n+            }\r\n+        }\r\n+        this.targetServiceUniqueName = invocation.getTargetServiceUniqueName();\r\n+        this.protocolServiceKey = invocation.getProtocolServiceKey();\r\n+    }\r\n+\r\n+    public RpcInvocation(Invocation invocation) {\r\n+        this(invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(), invocation.getParameterTypes(),\r\n+                invocation.getArguments(), invocation.getObjectAttachments(), invocation.getInvoker(), invocation.getAttributes());\r\n+        this.targetServiceUniqueName = invocation.getTargetServiceUniqueName();\r\n+    }\r\n+\r\n+    public RpcInvocation(Method method, String serviceName, String protocolServiceKey, Object[] arguments) {\r\n+        this(method, serviceName, protocolServiceKey, arguments, null, null);\r\n+    }\r\n+\r\n+    public RpcInvocation(Method method, String serviceName, String protocolServiceKey, Object[] arguments, Map<String, Object> attachment, Map<Object, Object> attributes) {\r\n+        this(method.getName(), serviceName, protocolServiceKey, method.getParameterTypes(), arguments, attachment, null, attributes);\r\n+        this.returnType = method.getReturnType();\r\n+    }\r\n+\r\n+    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments) {\r\n+        this(methodName, serviceName, protocolServiceKey, parameterTypes, arguments, null, null, null);\r\n+    }\r\n+\r\n+    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments, Map<String, Object> attachments) {\r\n+        this(methodName, serviceName, protocolServiceKey, parameterTypes, arguments, attachments, null, null);\r\n+    }\r\n+\r\n+    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments,\r\n+                         Map<String, Object> attachments, Invoker<?> invoker, Map<Object, Object> attributes) {\r\n+        this.methodName = methodName;\r\n+        this.serviceName = serviceName;\r\n+        this.protocolServiceKey = protocolServiceKey;\r\n+        this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;\r\n+        this.arguments = arguments == null ? new Object[0] : arguments;\r\n+        this.attachments = attachments == null ? new HashMap<>() : attachments;\r\n+        this.attributes = attributes == null ? new HashMap<>() : attributes;\r\n+        this.invoker = invoker;\r\n+        initParameterDesc();\r\n+    }\r\n+\r\n+    private void initParameterDesc() {\r\n+        ServiceRepository repository = ApplicationModel.getServiceRepository();\r\n+        if (StringUtils.isNotEmpty(serviceName)) {\r\n+            ServiceDescriptor serviceDescriptor = repository.lookupService(serviceName);\r\n+            if (serviceDescriptor != null) {\r\n+                MethodDescriptor methodDescriptor = serviceDescriptor.getMethod(methodName, parameterTypes);\r\n+                if (methodDescriptor != null) {\r\n+                    this.parameterTypesDesc = methodDescriptor.getParamDesc();\r\n+                    this.compatibleParamSignatures = methodDescriptor.getCompatibleParamSignatures();\r\n+                    this.returnTypes = methodDescriptor.getReturnTypes();\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        if (parameterTypesDesc == null) {\r\n+            this.parameterTypesDesc = ReflectUtils.getDesc(this.getParameterTypes());\r\n+            this.compatibleParamSignatures = Stream.of(this.parameterTypes).map(Class::getName).toArray(String[]::new);\r\n+            this.returnTypes = RpcUtils.getReturnTypes(this);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Invoker<?> getInvoker() {\r\n+        return invoker;\r\n+    }\r\n+\r\n+    public void setInvoker(Invoker<?> invoker) {\r\n+        this.invoker = invoker;\r\n+    }\r\n+\r\n+    public Object put(Object key, Object value) {\r\n+        return attributes.put(key, value);\r\n+    }\r\n+\r\n+    public Object get(Object key) {\r\n+        return attributes.get(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<Object, Object> getAttributes() {\r\n+        return attributes;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getTargetServiceUniqueName() {\r\n+        return targetServiceUniqueName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getProtocolServiceKey() {\r\n+        return protocolServiceKey;\r\n+    }\r\n+\r\n+    public void setTargetServiceUniqueName(String targetServiceUniqueName) {\r\n+        this.targetServiceUniqueName = targetServiceUniqueName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getMethodName() {\r\n+        return methodName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getServiceName() {\r\n+        return serviceName;\r\n+    }\r\n+\r\n+    public void setServiceName(String serviceName) {\r\n+        this.serviceName = serviceName;\r\n+    }\r\n+\r\n+    public void setMethodName(String methodName) {\r\n+        this.methodName = methodName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<?>[] getParameterTypes() {\r\n+        return parameterTypes;\r\n+    }\r\n+\r\n+    public void setParameterTypes(Class<?>[] parameterTypes) {\r\n+        this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;\r\n+    }\r\n+\r\n+    public String getParameterTypesDesc() {\r\n+        return parameterTypesDesc;\r\n+    }\r\n+\r\n+    public void setParameterTypesDesc(String parameterTypesDesc) {\r\n+        this.parameterTypesDesc = parameterTypesDesc;\r\n+    }\r\n+\r\n+    public String[] getCompatibleParamSignatures() {\r\n+        return compatibleParamSignatures;\r\n+    }\r\n+\r\n+    // parameter signatures can be set independently, it is useful when the service type is not found on caller side and\r\n+    // the invocation is not generic invocation either.\r\n+    public void setCompatibleParamSignatures(String[] compatibleParamSignatures) {\r\n+        this.compatibleParamSignatures = compatibleParamSignatures;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object[] getArguments() {\r\n+        return arguments;\r\n+    }\r\n+\r\n+    public void setArguments(Object[] arguments) {\r\n+        this.arguments = arguments == null ? new Object[0] : arguments;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<String, Object> getObjectAttachments() {\r\n+        return attachments;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, String value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @Override\r\n+    public Map<String, String> getAttachments() {\r\n+        return new AttachmentsAdapter.ObjectToStringMap(attachments);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setAttachments(Map<String, String> attachments) {\r\n+        this.attachments = attachments == null ? new HashMap<>() : new HashMap<>(attachments);\r\n+    }\r\n+\r\n+    public void setObjectAttachments(Map<String, Object> attachments) {\r\n+        this.attachments = attachments == null ? new HashMap<>() : attachments;\r\n+    }\r\n+\r\n+    public void setAttachment(String key, Object value) {\r\n+       setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachment(String key, Object value) {\r\n+        if (attachments == null) {\r\n+            attachments = new HashMap<>();\r\n+        }\r\n+        attachments.put(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachmentIfAbsent(String key, String value) {\r\n+        setObjectAttachmentIfAbsent(key, value);\r\n+    }\r\n+\r\n+    public void setAttachmentIfAbsent(String key, Object value) {\r\n+        setObjectAttachmentIfAbsent(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachmentIfAbsent(String key, Object value) {\r\n+        if (attachments == null) {\r\n+            attachments = new HashMap<>();\r\n+        }\r\n+        if (!attachments.containsKey(key)) {\r\n+            attachments.put(key, value);\r\n+        }\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void addAttachments(Map<String, String> attachments) {\r\n+        if (attachments == null) {\r\n+            return;\r\n+        }\r\n+        if (this.attachments == null) {\r\n+            this.attachments = new HashMap<>();\r\n+        }\r\n+        this.attachments.putAll(attachments);\r\n+    }\r\n+\r\n+    public void addObjectAttachments(Map<String, Object> attachments) {\r\n+        if (attachments == null) {\r\n+            return;\r\n+        }\r\n+        if (this.attachments == null) {\r\n+            this.attachments = new HashMap<>();\r\n+        }\r\n+        this.attachments.putAll(attachments);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void addAttachmentsIfAbsent(Map<String, String> attachments) {\r\n+        if (attachments == null) {\r\n+            return;\r\n+        }\r\n+        for (Map.Entry<String, String> entry : attachments.entrySet()) {\r\n+            setAttachmentIfAbsent(entry.getKey(), entry.getValue());\r\n+        }\r\n+    }\r\n+\r\n+    public void addObjectAttachmentsIfAbsent(Map<String, Object> attachments) {\r\n+        if (attachments == null) {\r\n+            return;\r\n+        }\r\n+        for (Map.Entry<String, Object> entry : attachments.entrySet()) {\r\n+            setAttachmentIfAbsent(entry.getKey(), entry.getValue());\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    @Deprecated\r\n+    public String getAttachment(String key) {\r\n+        if (attachments == null) {\r\n+            return null;\r\n+        }\r\n+        Object value = attachments.get(key);\r\n+        if (value instanceof String) {\r\n+            return (String) value;\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key) {\r\n+        if (attachments == null) {\r\n+            return null;\r\n+        }\r\n+        return attachments.get(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    @Deprecated\r\n+    public String getAttachment(String key, String defaultValue) {\r\n+        if (attachments == null) {\r\n+            return defaultValue;\r\n+        }\r\n+        Object value = attachments.get(key);\r\n+        if (value instanceof String) {\r\n+            String strValue = (String) value;\r\n+            if (StringUtils.isEmpty(strValue)) {\r\n+                return defaultValue;\r\n+            } else {\r\n+                return strValue;\r\n+            }\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public Object getObjectAttachment(String key, Object defaultValue) {\r\n+        if (attachments == null) {\r\n+            return defaultValue;\r\n+        }\r\n+        Object value = attachments.get(key);\r\n+        if (value == null) {\r\n+            return defaultValue;\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    public Class<?> getReturnType() {\r\n+        return returnType;\r\n+    }\r\n+\r\n+    public void setReturnType(Class<?> returnType) {\r\n+        this.returnType = returnType;\r\n+    }\r\n+\r\n+    public Type[] getReturnTypes() {\r\n+        return returnTypes;\r\n+    }\r\n+\r\n+    public void setReturnTypes(Type[] returnTypes) {\r\n+        this.returnTypes = returnTypes;\r\n+    }\r\n+\r\n+    public InvokeMode getInvokeMode() {\r\n+        return invokeMode;\r\n+    }\r\n+\r\n+    public void setInvokeMode(InvokeMode invokeMode) {\r\n+        this.invokeMode = invokeMode;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"RpcInvocation [methodName=\" + methodName + \", parameterTypes=\"\r\n+                + Arrays.toString(parameterTypes) + \", arguments=\" + Arrays.toString(arguments)\r\n+                + \", attachments=\" + attachments + \"]\";\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/TimeoutCountDown.java", "source2": "org/apache/dubbo/rpc/TimeoutCountDown.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,90 +1,90 @@\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;\n-\n-import java.util.concurrent.TimeUnit;\n-\n-public final class TimeoutCountDown implements Comparable<TimeoutCountDown> {\n-\n-  public static TimeoutCountDown newCountDown(long timeout, TimeUnit unit) {\n-    return new TimeoutCountDown(timeout, unit);\n-  }\n-\n-  private final long timeoutInMillis;\n-  private final long deadlineInNanos;\n-  private volatile boolean expired;\n-\n-  private TimeoutCountDown(long timeout, TimeUnit unit) {\n-    timeoutInMillis = TimeUnit.MILLISECONDS.convert(timeout, unit);\n-    deadlineInNanos = System.nanoTime() + TimeUnit.NANOSECONDS.convert(timeout, unit);\n-  }\n-\n-  public long getTimeoutInMilli() {\n-    return timeoutInMillis;\n-  }\n-\n-  public boolean isExpired() {\n-    if (!expired) {\n-      if (deadlineInNanos - System.nanoTime() <= 0) {\n-        expired = true;\n-      } else {\n-        return false;\n-      }\n-    }\n-    return true;\n-  }\n-\n-  public long timeRemaining(TimeUnit unit) {\n-    final long currentNanos = System.nanoTime();\n-    if (!expired && deadlineInNanos - currentNanos <= 0) {\n-      expired = true;\n-    }\n-    return unit.convert(deadlineInNanos - currentNanos, TimeUnit.NANOSECONDS);\n-  }\n-\n-  public long elapsedMillis() {\n-    if (isExpired()) {\n-      return timeoutInMillis + TimeUnit.MILLISECONDS.convert(System.nanoTime() - deadlineInNanos, TimeUnit.NANOSECONDS);\n-    } else {\n-      return TimeUnit.MILLISECONDS.convert(deadlineInNanos - System.nanoTime(), TimeUnit.NANOSECONDS);\n-    }\n-  }\n-\n-  @Override\n-  public String toString() {\n-    long timeoutMillis = TimeUnit.MILLISECONDS.convert(deadlineInNanos, TimeUnit.NANOSECONDS);\n-    long remainingMillis = timeRemaining(TimeUnit.MILLISECONDS);\n-\n-    StringBuilder buf = new StringBuilder();\n-    buf.append(\"Total timeout value - \");\n-    buf.append(timeoutMillis);\n-    buf.append(\", times remaining - \");\n-    buf.append(remainingMillis);\n-    return buf.toString();\n-  }\n-\n-  @Override\n-  public int compareTo(TimeoutCountDown another) {\n-    long delta = this.deadlineInNanos - another.deadlineInNanos;\n-    if (delta < 0) {\n-      return -1;\n-    } else if (delta > 0) {\n-      return 1;\n-    }\n-    return 0;\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;\r\n+\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+public final class TimeoutCountDown implements Comparable<TimeoutCountDown> {\r\n+\r\n+  public static TimeoutCountDown newCountDown(long timeout, TimeUnit unit) {\r\n+    return new TimeoutCountDown(timeout, unit);\r\n+  }\r\n+\r\n+  private final long timeoutInMillis;\r\n+  private final long deadlineInNanos;\r\n+  private volatile boolean expired;\r\n+\r\n+  private TimeoutCountDown(long timeout, TimeUnit unit) {\r\n+    timeoutInMillis = TimeUnit.MILLISECONDS.convert(timeout, unit);\r\n+    deadlineInNanos = System.nanoTime() + TimeUnit.NANOSECONDS.convert(timeout, unit);\r\n+  }\r\n+\r\n+  public long getTimeoutInMilli() {\r\n+    return timeoutInMillis;\r\n+  }\r\n+\r\n+  public boolean isExpired() {\r\n+    if (!expired) {\r\n+      if (deadlineInNanos - System.nanoTime() <= 0) {\r\n+        expired = true;\r\n+      } else {\r\n+        return false;\r\n+      }\r\n+    }\r\n+    return true;\r\n+  }\r\n+\r\n+  public long timeRemaining(TimeUnit unit) {\r\n+    final long currentNanos = System.nanoTime();\r\n+    if (!expired && deadlineInNanos - currentNanos <= 0) {\r\n+      expired = true;\r\n+    }\r\n+    return unit.convert(deadlineInNanos - currentNanos, TimeUnit.NANOSECONDS);\r\n+  }\r\n+\r\n+  public long elapsedMillis() {\r\n+    if (isExpired()) {\r\n+      return timeoutInMillis + TimeUnit.MILLISECONDS.convert(System.nanoTime() - deadlineInNanos, TimeUnit.NANOSECONDS);\r\n+    } else {\r\n+      return TimeUnit.MILLISECONDS.convert(deadlineInNanos - System.nanoTime(), TimeUnit.NANOSECONDS);\r\n+    }\r\n+  }\r\n+\r\n+  @Override\r\n+  public String toString() {\r\n+    long timeoutMillis = TimeUnit.MILLISECONDS.convert(deadlineInNanos, TimeUnit.NANOSECONDS);\r\n+    long remainingMillis = timeRemaining(TimeUnit.MILLISECONDS);\r\n+\r\n+    StringBuilder buf = new StringBuilder();\r\n+    buf.append(\"Total timeout value - \");\r\n+    buf.append(timeoutMillis);\r\n+    buf.append(\", times remaining - \");\r\n+    buf.append(remainingMillis);\r\n+    return buf.toString();\r\n+  }\r\n+\r\n+  @Override\r\n+  public int compareTo(TimeoutCountDown another) {\r\n+    long delta = this.deadlineInNanos - another.deadlineInNanos;\r\n+    if (delta < 0) {\r\n+      return -1;\r\n+    } else if (delta > 0) {\r\n+      return 1;\r\n+    }\r\n+    return 0;\r\n+  }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/ZoneDetector.java", "source2": "org/apache/dubbo/rpc/ZoneDetector.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,32 +1,32 @@\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;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-/**\n- * Extend and provide your own implementation if you want to distribute traffic around registries.\n- * Please, name it as 'default'\n- */\n-@SPI\n-public interface ZoneDetector {\n-\n-    String getZoneOfCurrentRequest(Invocation invocation);\n-\n-    String isZoneForcingEnabled(Invocation invocation, String zone);\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;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+/**\r\n+ * Extend and provide your own implementation if you want to distribute traffic around registries.\r\n+ * Please, name it as 'default'\r\n+ */\r\n+@SPI\r\n+public interface ZoneDetector {\r\n+\r\n+    String getZoneOfCurrentRequest(Invocation invocation);\r\n+\r\n+    String isZoneForcingEnabled(Invocation invocation, String zone);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/AccessLogFilter.java", "source2": "org/apache/dubbo/rpc/filter/AccessLogFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,194 +1,194 @@\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.filter;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ConcurrentHashSet;\n-import org.apache.dubbo.common.utils.ConfigUtils;\n-import org.apache.dubbo.common.utils.NamedThreadFactory;\n-import org.apache.dubbo.rpc.Filter;\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.support.AccessLogData;\n-\n-import java.io.File;\n-import java.io.FileWriter;\n-import java.io.IOException;\n-import java.text.DateFormat;\n-import java.text.SimpleDateFormat;\n-import java.util.Date;\n-import java.util.Iterator;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.Executors;\n-import java.util.concurrent.ScheduledExecutorService;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;\n-import static org.apache.dubbo.rpc.Constants.ACCESS_LOG_KEY;\n-\n-/**\n- * Record access log for the service.\n- * <p>\n- * Logger key is <code><b>dubbo.accesslog</b></code>.\n- * In order to configure access log appear in the specified appender only, additivity need to be configured in log4j's\n- * config file, for example:\n- * <code>\n- * <pre>\n- * &lt;logger name=\"<b>dubbo.accesslog</b>\" <font color=\"red\">additivity=\"false\"</font>&gt;\n- *    &lt;level value=\"info\" /&gt;\n- *    &lt;appender-ref ref=\"foo\" /&gt;\n- * &lt;/logger&gt;\n- * </pre></code>\n- */\n-@Activate(group = PROVIDER, value = ACCESS_LOG_KEY)\n-public class AccessLogFilter implements Filter {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(AccessLogFilter.class);\n-\n-    private static final String LOG_KEY = \"dubbo.accesslog\";\n-\n-    private static final int LOG_MAX_BUFFER = 5000;\n-\n-    private static final long LOG_OUTPUT_INTERVAL = 5000;\n-\n-    private static final String FILE_DATE_FORMAT = \"yyyyMMdd\";\n-\n-    // It's safe to declare it as singleton since it runs on single thread only\n-    private static final DateFormat FILE_NAME_FORMATTER = new SimpleDateFormat(FILE_DATE_FORMAT);\n-\n-    private static final Map<String, Set<AccessLogData>> LOG_ENTRIES = new ConcurrentHashMap<>();\n-\n-    private static final ScheduledExecutorService LOG_SCHEDULED = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"Dubbo-Access-Log\", true));\n-\n-    /**\n-     * Default constructor initialize demon thread for writing into access log file with names with access log key\n-     * defined in url <b>accesslog</b>\n-     */\n-    public AccessLogFilter() {\n-        LOG_SCHEDULED.scheduleWithFixedDelay(this::writeLogToFile, LOG_OUTPUT_INTERVAL, LOG_OUTPUT_INTERVAL, TimeUnit.MILLISECONDS);\n-    }\n-\n-    /**\n-     * This method logs the access log for service method invocation call.\n-     *\n-     * @param invoker service\n-     * @param inv     Invocation service method.\n-     * @return Result from service method.\n-     * @throws RpcException\n-     */\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {\n-        try {\n-            String accessLogKey = invoker.getUrl().getParameter(ACCESS_LOG_KEY);\n-            if (ConfigUtils.isNotEmpty(accessLogKey)) {\n-                AccessLogData logData = AccessLogData.newLogData(); \n-                logData.buildAccessLogData(invoker, inv);\n-                log(accessLogKey, logData);\n-            }\n-        } catch (Throwable t) {\n-            logger.warn(\"Exception in AccessLogFilter of service(\" + invoker + \" -> \" + inv + \")\", t);\n-        }\n-        return invoker.invoke(inv);\n-    }\n-\n-    private void log(String accessLog, AccessLogData accessLogData) {\n-        Set<AccessLogData> logSet = LOG_ENTRIES.computeIfAbsent(accessLog, k -> new ConcurrentHashSet<>());\n-\n-        if (logSet.size() < LOG_MAX_BUFFER) {\n-            logSet.add(accessLogData);\n-        } else {\n-            logger.warn(\"AccessLog buffer is full. Do a force writing to file to clear buffer.\");\n-            //just write current logSet to file.\n-            writeLogSetToFile(accessLog, logSet);\n-            //after force writing, add accessLogData to current logSet\n-            logSet.add(accessLogData);\n-        }\n-    }\n-\n-    private void writeLogSetToFile(String accessLog, Set<AccessLogData> logSet) {\n-        try {\n-            if (ConfigUtils.isDefault(accessLog)) {\n-                processWithServiceLogger(logSet);\n-            } else {\n-                File file = new File(accessLog);\n-                createIfLogDirAbsent(file);\n-                if (logger.isDebugEnabled()) {\n-                    logger.debug(\"Append log to \" + accessLog);\n-                }\n-                renameFile(file);\n-                processWithAccessKeyLogger(logSet, file);\n-            }\n-        } catch (Exception e) {\n-            logger.error(e.getMessage(), e);\n-        }\n-    }\n-\n-    private void writeLogToFile() {\n-        if (!LOG_ENTRIES.isEmpty()) {\n-            for (Map.Entry<String, Set<AccessLogData>> entry : LOG_ENTRIES.entrySet()) {\n-                String accessLog = entry.getKey();\n-                Set<AccessLogData> logSet = entry.getValue();\n-                writeLogSetToFile(accessLog, logSet);\n-            }\n-        }\n-    }\n-\n-    private void processWithAccessKeyLogger(Set<AccessLogData> logSet, File file) throws IOException {\n-        try (FileWriter writer = new FileWriter(file, true)) {\n-            for (Iterator<AccessLogData> iterator = logSet.iterator();\n-                 iterator.hasNext();\n-                 iterator.remove()) {\n-                writer.write(iterator.next().getLogMessage());\n-                writer.write(System.getProperty(\"line.separator\"));\n-            }\n-            writer.flush();\n-        }\n-    }\n-\n-    private void processWithServiceLogger(Set<AccessLogData> logSet) {\n-        for (Iterator<AccessLogData> iterator = logSet.iterator();\n-             iterator.hasNext();\n-             iterator.remove()) {\n-            AccessLogData logData = iterator.next();\n-            LoggerFactory.getLogger(LOG_KEY + \".\" + logData.getServiceName()).info(logData.getLogMessage());\n-        }\n-    }\n-\n-    private void createIfLogDirAbsent(File file) {\n-        File dir = file.getParentFile();\n-        if (null != dir && !dir.exists()) {\n-            dir.mkdirs();\n-        }\n-    }\n-\n-    private void renameFile(File file) {\n-        if (file.exists()) {\n-            String now = FILE_NAME_FORMATTER.format(new Date());\n-            String last = FILE_NAME_FORMATTER.format(new Date(file.lastModified()));\n-            if (!now.equals(last)) {\n-                File archive = new File(file.getAbsolutePath() + \".\" + last);\n-                file.renameTo(archive);\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.filter;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ConcurrentHashSet;\r\n+import org.apache.dubbo.common.utils.ConfigUtils;\r\n+import org.apache.dubbo.common.utils.NamedThreadFactory;\r\n+import org.apache.dubbo.rpc.Filter;\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.support.AccessLogData;\r\n+\r\n+import java.io.File;\r\n+import java.io.FileWriter;\r\n+import java.io.IOException;\r\n+import java.text.DateFormat;\r\n+import java.text.SimpleDateFormat;\r\n+import java.util.Date;\r\n+import java.util.Iterator;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.Executors;\r\n+import java.util.concurrent.ScheduledExecutorService;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;\r\n+import static org.apache.dubbo.rpc.Constants.ACCESS_LOG_KEY;\r\n+\r\n+/**\r\n+ * Record access log for the service.\r\n+ * <p>\r\n+ * Logger key is <code><b>dubbo.accesslog</b></code>.\r\n+ * In order to configure access log appear in the specified appender only, additivity need to be configured in log4j's\r\n+ * config file, for example:\r\n+ * <code>\r\n+ * <pre>\r\n+ * &lt;logger name=\"<b>dubbo.accesslog</b>\" <font color=\"red\">additivity=\"false\"</font>&gt;\r\n+ *    &lt;level value=\"info\" /&gt;\r\n+ *    &lt;appender-ref ref=\"foo\" /&gt;\r\n+ * &lt;/logger&gt;\r\n+ * </pre></code>\r\n+ */\r\n+@Activate(group = PROVIDER, value = ACCESS_LOG_KEY)\r\n+public class AccessLogFilter implements Filter {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(AccessLogFilter.class);\r\n+\r\n+    private static final String LOG_KEY = \"dubbo.accesslog\";\r\n+\r\n+    private static final int LOG_MAX_BUFFER = 5000;\r\n+\r\n+    private static final long LOG_OUTPUT_INTERVAL = 5000;\r\n+\r\n+    private static final String FILE_DATE_FORMAT = \"yyyyMMdd\";\r\n+\r\n+    // It's safe to declare it as singleton since it runs on single thread only\r\n+    private static final DateFormat FILE_NAME_FORMATTER = new SimpleDateFormat(FILE_DATE_FORMAT);\r\n+\r\n+    private static final Map<String, Set<AccessLogData>> LOG_ENTRIES = new ConcurrentHashMap<>();\r\n+\r\n+    private static final ScheduledExecutorService LOG_SCHEDULED = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"Dubbo-Access-Log\", true));\r\n+\r\n+    /**\r\n+     * Default constructor initialize demon thread for writing into access log file with names with access log key\r\n+     * defined in url <b>accesslog</b>\r\n+     */\r\n+    public AccessLogFilter() {\r\n+        LOG_SCHEDULED.scheduleWithFixedDelay(this::writeLogToFile, LOG_OUTPUT_INTERVAL, LOG_OUTPUT_INTERVAL, TimeUnit.MILLISECONDS);\r\n+    }\r\n+\r\n+    /**\r\n+     * This method logs the access log for service method invocation call.\r\n+     *\r\n+     * @param invoker service\r\n+     * @param inv     Invocation service method.\r\n+     * @return Result from service method.\r\n+     * @throws RpcException\r\n+     */\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {\r\n+        try {\r\n+            String accessLogKey = invoker.getUrl().getParameter(ACCESS_LOG_KEY);\r\n+            if (ConfigUtils.isNotEmpty(accessLogKey)) {\r\n+                AccessLogData logData = AccessLogData.newLogData(); \r\n+                logData.buildAccessLogData(invoker, inv);\r\n+                log(accessLogKey, logData);\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.warn(\"Exception in AccessLogFilter of service(\" + invoker + \" -> \" + inv + \")\", t);\r\n+        }\r\n+        return invoker.invoke(inv);\r\n+    }\r\n+\r\n+    private void log(String accessLog, AccessLogData accessLogData) {\r\n+        Set<AccessLogData> logSet = LOG_ENTRIES.computeIfAbsent(accessLog, k -> new ConcurrentHashSet<>());\r\n+\r\n+        if (logSet.size() < LOG_MAX_BUFFER) {\r\n+            logSet.add(accessLogData);\r\n+        } else {\r\n+            logger.warn(\"AccessLog buffer is full. Do a force writing to file to clear buffer.\");\r\n+            //just write current logSet to file.\r\n+            writeLogSetToFile(accessLog, logSet);\r\n+            //after force writing, add accessLogData to current logSet\r\n+            logSet.add(accessLogData);\r\n+        }\r\n+    }\r\n+\r\n+    private void writeLogSetToFile(String accessLog, Set<AccessLogData> logSet) {\r\n+        try {\r\n+            if (ConfigUtils.isDefault(accessLog)) {\r\n+                processWithServiceLogger(logSet);\r\n+            } else {\r\n+                File file = new File(accessLog);\r\n+                createIfLogDirAbsent(file);\r\n+                if (logger.isDebugEnabled()) {\r\n+                    logger.debug(\"Append log to \" + accessLog);\r\n+                }\r\n+                renameFile(file);\r\n+                processWithAccessKeyLogger(logSet, file);\r\n+            }\r\n+        } catch (Exception e) {\r\n+            logger.error(e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    private void writeLogToFile() {\r\n+        if (!LOG_ENTRIES.isEmpty()) {\r\n+            for (Map.Entry<String, Set<AccessLogData>> entry : LOG_ENTRIES.entrySet()) {\r\n+                String accessLog = entry.getKey();\r\n+                Set<AccessLogData> logSet = entry.getValue();\r\n+                writeLogSetToFile(accessLog, logSet);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void processWithAccessKeyLogger(Set<AccessLogData> logSet, File file) throws IOException {\r\n+        try (FileWriter writer = new FileWriter(file, true)) {\r\n+            for (Iterator<AccessLogData> iterator = logSet.iterator();\r\n+                 iterator.hasNext();\r\n+                 iterator.remove()) {\r\n+                writer.write(iterator.next().getLogMessage());\r\n+                writer.write(System.getProperty(\"line.separator\"));\r\n+            }\r\n+            writer.flush();\r\n+        }\r\n+    }\r\n+\r\n+    private void processWithServiceLogger(Set<AccessLogData> logSet) {\r\n+        for (Iterator<AccessLogData> iterator = logSet.iterator();\r\n+             iterator.hasNext();\r\n+             iterator.remove()) {\r\n+            AccessLogData logData = iterator.next();\r\n+            LoggerFactory.getLogger(LOG_KEY + \".\" + logData.getServiceName()).info(logData.getLogMessage());\r\n+        }\r\n+    }\r\n+\r\n+    private void createIfLogDirAbsent(File file) {\r\n+        File dir = file.getParentFile();\r\n+        if (null != dir && !dir.exists()) {\r\n+            dir.mkdirs();\r\n+        }\r\n+    }\r\n+\r\n+    private void renameFile(File file) {\r\n+        if (file.exists()) {\r\n+            String now = FILE_NAME_FORMATTER.format(new Date());\r\n+            String last = FILE_NAME_FORMATTER.format(new Date(file.lastModified()));\r\n+            if (!now.equals(last)) {\r\n+                File archive = new File(file.getAbsolutePath() + \".\" + last);\r\n+                file.renameTo(archive);\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/ConsumerContextFilter.java", "source2": "org/apache/dubbo/rpc/filter/ConsumerContextFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,72 +1,72 @@\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.filter;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.NetUtils;\n-import org.apache.dubbo.rpc.AsyncRpcResult;\n-import org.apache.dubbo.rpc.Filter;\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.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.TimeoutCountDown;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;\n-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_KEY;\n-\n-/**\n- * ConsumerContextFilter set current RpcContext with invoker,invocation, local host, remote host and port\n- * for consumer invoker.It does it to make the requires info available to execution thread's RpcContext.\n- *\n- * @see org.apache.dubbo.rpc.Filter\n- * @see RpcContext\n- */\n-@Activate(group = CONSUMER, order = -10000)\n-public class ConsumerContextFilter implements Filter {\n-\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-        RpcContext context = RpcContext.getContext();\n-        context.setInvoker(invoker)\n-                .setInvocation(invocation)\n-                .setLocalAddress(NetUtils.getLocalHost(), 0)\n-                .setRemoteAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort())\n-                .setRemoteApplicationName(invoker.getUrl().getParameter(REMOTE_APPLICATION_KEY))\n-                .setAttachment(REMOTE_APPLICATION_KEY, invoker.getUrl().getParameter(APPLICATION_KEY));\n-        if (invocation instanceof RpcInvocation) {\n-            ((RpcInvocation) invocation).setInvoker(invoker);\n-        }\n-\n-        // pass default timeout set by end user (ReferenceConfig)\n-        Object countDown = context.get(TIME_COUNTDOWN_KEY);\n-        if (countDown != null) {\n-            TimeoutCountDown timeoutCountDown = (TimeoutCountDown) countDown;\n-            if (timeoutCountDown.isExpired()) {\n-                return AsyncRpcResult.newDefaultAsyncResult(new RpcException(RpcException.TIMEOUT_TERMINATE,\n-                        \"No time left for making the following call: \" + invocation.getServiceName() + \".\"\n-                                + invocation.getMethodName() + \", terminate directly.\"), invocation);\n-            }\n-        }\n-        return invoker.invoke(invocation);\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.filter;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.NetUtils;\r\n+import org.apache.dubbo.rpc.AsyncRpcResult;\r\n+import org.apache.dubbo.rpc.Filter;\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.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.TimeoutCountDown;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_KEY;\r\n+\r\n+/**\r\n+ * ConsumerContextFilter set current RpcContext with invoker,invocation, local host, remote host and port\r\n+ * for consumer invoker.It does it to make the requires info available to execution thread's RpcContext.\r\n+ *\r\n+ * @see org.apache.dubbo.rpc.Filter\r\n+ * @see RpcContext\r\n+ */\r\n+@Activate(group = CONSUMER, order = -10000)\r\n+public class ConsumerContextFilter implements Filter {\r\n+\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+        RpcContext context = RpcContext.getContext();\r\n+        context.setInvoker(invoker)\r\n+                .setInvocation(invocation)\r\n+                .setLocalAddress(NetUtils.getLocalHost(), 0)\r\n+                .setRemoteAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort())\r\n+                .setRemoteApplicationName(invoker.getUrl().getParameter(REMOTE_APPLICATION_KEY))\r\n+                .setAttachment(REMOTE_APPLICATION_KEY, invoker.getUrl().getParameter(APPLICATION_KEY));\r\n+        if (invocation instanceof RpcInvocation) {\r\n+            ((RpcInvocation) invocation).setInvoker(invoker);\r\n+        }\r\n+\r\n+        // pass default timeout set by end user (ReferenceConfig)\r\n+        Object countDown = context.get(TIME_COUNTDOWN_KEY);\r\n+        if (countDown != null) {\r\n+            TimeoutCountDown timeoutCountDown = (TimeoutCountDown) countDown;\r\n+            if (timeoutCountDown.isExpired()) {\r\n+                return AsyncRpcResult.newDefaultAsyncResult(new RpcException(RpcException.TIMEOUT_TERMINATE,\r\n+                        \"No time left for making the following call: \" + invocation.getServiceName() + \".\"\r\n+                                + invocation.getMethodName() + \", terminate directly.\"), invocation);\r\n+            }\r\n+        }\r\n+        return invoker.invoke(invocation);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/ContextFilter.java", "source2": "org/apache/dubbo/rpc/filter/ContextFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,148 +1,148 @@\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.filter;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.Filter;\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.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.TimeoutCountDown;\n-import org.apache.dubbo.rpc.support.RpcUtils;\n-\n-import java.util.HashMap;\n-import java.util.HashSet;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;\n-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_ATTACHMENT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\n-import static org.apache.dubbo.rpc.Constants.FORCE_USE_TAG;\n-import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\n-\n-\n-/**\n- * ContextFilter set the provider RpcContext with invoker, invocation, local port it is using and host for\n- * current execution thread.\n- *\n- * @see RpcContext\n- */\n-@Activate(group = PROVIDER, order = -10000)\n-public class ContextFilter implements Filter, Filter.Listener {\n-\n-    private static final String TAG_KEY = \"dubbo.tag\";\n-\n-    private static final Set<String> UNLOADING_KEYS;\n-\n-    static {\n-        UNLOADING_KEYS = new HashSet<>(128);\n-        UNLOADING_KEYS.add(PATH_KEY);\n-        UNLOADING_KEYS.add(INTERFACE_KEY);\n-        UNLOADING_KEYS.add(GROUP_KEY);\n-        UNLOADING_KEYS.add(VERSION_KEY);\n-        UNLOADING_KEYS.add(DUBBO_VERSION_KEY);\n-        UNLOADING_KEYS.add(TOKEN_KEY);\n-        UNLOADING_KEYS.add(TIMEOUT_KEY);\n-        UNLOADING_KEYS.add(TIMEOUT_ATTACHMENT_KEY);\n-\n-        // Remove async property to avoid being passed to the following invoke chain.\n-        UNLOADING_KEYS.add(ASYNC_KEY);\n-        UNLOADING_KEYS.add(TAG_KEY);\n-        UNLOADING_KEYS.add(FORCE_USE_TAG);\n-    }\n-\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-        Map<String, Object> attachments = invocation.getObjectAttachments();\n-        if (attachments != null) {\n-            Map<String, Object> newAttach = new HashMap<>(attachments.size());\n-            for (Map.Entry<String, Object> entry : attachments.entrySet()) {\n-                String key = entry.getKey();\n-                if (!UNLOADING_KEYS.contains(key)) {\n-                    newAttach.put(key, entry.getValue());\n-                }\n-            }\n-            attachments = newAttach;\n-        }\n-\n-        RpcContext context = RpcContext.getContext();\n-        context.setInvoker(invoker)\n-                .setInvocation(invocation)\n-//                .setAttachments(attachments)  // merged from dubbox\n-                .setLocalAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort());\n-        String remoteApplication = (String) invocation.getAttachment(REMOTE_APPLICATION_KEY);\n-        if (StringUtils.isNotEmpty(remoteApplication)) {\n-            context.setRemoteApplicationName(remoteApplication);\n-        } else {\n-            context.setRemoteApplicationName((String) context.getAttachment(REMOTE_APPLICATION_KEY));\n-        }\n-\n-        long timeout = RpcUtils.getTimeout(invocation, -1);\n-        if (timeout != -1) {\n-            context.set(TIME_COUNTDOWN_KEY, TimeoutCountDown.newCountDown(timeout, TimeUnit.MILLISECONDS));\n-        }\n-\n-        // merged from dubbox\n-        // we may already added some attachments into RpcContext before this filter (e.g. in rest protocol)\n-        if (attachments != null) {\n-            if (context.getObjectAttachments() != null) {\n-                context.getObjectAttachments().putAll(attachments);\n-            } else {\n-                context.setObjectAttachments(attachments);\n-            }\n-        }\n-\n-        if (invocation instanceof RpcInvocation) {\n-            ((RpcInvocation) invocation).setInvoker(invoker);\n-        }\n-\n-        try {\n-            context.clearAfterEachInvoke(false);\n-            return invoker.invoke(invocation);\n-        } finally {\n-            context.clearAfterEachInvoke(true);\n-            // IMPORTANT! For async scenario, we must remove context from current thread, so we always create a new RpcContext for the next invoke for the same thread.\n-            RpcContext.removeContext(true);\n-            RpcContext.removeServerContext();\n-        }\n-    }\n-\n-    @Override\n-    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {\n-        // pass attachments to result\n-        appResponse.addObjectAttachments(RpcContext.getServerContext().getObjectAttachments());\n-    }\n-\n-    @Override\n-    public void onError(Throwable t, Invoker<?> invoker, Invocation invocation) {\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.filter;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.Filter;\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.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.TimeoutCountDown;\r\n+import org.apache.dubbo.rpc.support.RpcUtils;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.HashSet;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_ATTACHMENT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.FORCE_USE_TAG;\r\n+import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\r\n+\r\n+\r\n+/**\r\n+ * ContextFilter set the provider RpcContext with invoker, invocation, local port it is using and host for\r\n+ * current execution thread.\r\n+ *\r\n+ * @see RpcContext\r\n+ */\r\n+@Activate(group = PROVIDER, order = -10000)\r\n+public class ContextFilter implements Filter, Filter.Listener {\r\n+\r\n+    private static final String TAG_KEY = \"dubbo.tag\";\r\n+\r\n+    private static final Set<String> UNLOADING_KEYS;\r\n+\r\n+    static {\r\n+        UNLOADING_KEYS = new HashSet<>(128);\r\n+        UNLOADING_KEYS.add(PATH_KEY);\r\n+        UNLOADING_KEYS.add(INTERFACE_KEY);\r\n+        UNLOADING_KEYS.add(GROUP_KEY);\r\n+        UNLOADING_KEYS.add(VERSION_KEY);\r\n+        UNLOADING_KEYS.add(DUBBO_VERSION_KEY);\r\n+        UNLOADING_KEYS.add(TOKEN_KEY);\r\n+        UNLOADING_KEYS.add(TIMEOUT_KEY);\r\n+        UNLOADING_KEYS.add(TIMEOUT_ATTACHMENT_KEY);\r\n+\r\n+        // Remove async property to avoid being passed to the following invoke chain.\r\n+        UNLOADING_KEYS.add(ASYNC_KEY);\r\n+        UNLOADING_KEYS.add(TAG_KEY);\r\n+        UNLOADING_KEYS.add(FORCE_USE_TAG);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+        Map<String, Object> attachments = invocation.getObjectAttachments();\r\n+        if (attachments != null) {\r\n+            Map<String, Object> newAttach = new HashMap<>(attachments.size());\r\n+            for (Map.Entry<String, Object> entry : attachments.entrySet()) {\r\n+                String key = entry.getKey();\r\n+                if (!UNLOADING_KEYS.contains(key)) {\r\n+                    newAttach.put(key, entry.getValue());\r\n+                }\r\n+            }\r\n+            attachments = newAttach;\r\n+        }\r\n+\r\n+        RpcContext context = RpcContext.getContext();\r\n+        context.setInvoker(invoker)\r\n+                .setInvocation(invocation)\r\n+//                .setAttachments(attachments)  // merged from dubbox\r\n+                .setLocalAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort());\r\n+        String remoteApplication = (String) invocation.getAttachment(REMOTE_APPLICATION_KEY);\r\n+        if (StringUtils.isNotEmpty(remoteApplication)) {\r\n+            context.setRemoteApplicationName(remoteApplication);\r\n+        } else {\r\n+            context.setRemoteApplicationName((String) context.getAttachment(REMOTE_APPLICATION_KEY));\r\n+        }\r\n+\r\n+        long timeout = RpcUtils.getTimeout(invocation, -1);\r\n+        if (timeout != -1) {\r\n+            context.set(TIME_COUNTDOWN_KEY, TimeoutCountDown.newCountDown(timeout, TimeUnit.MILLISECONDS));\r\n+        }\r\n+\r\n+        // merged from dubbox\r\n+        // we may already added some attachments into RpcContext before this filter (e.g. in rest protocol)\r\n+        if (attachments != null) {\r\n+            if (context.getObjectAttachments() != null) {\r\n+                context.getObjectAttachments().putAll(attachments);\r\n+            } else {\r\n+                context.setObjectAttachments(attachments);\r\n+            }\r\n+        }\r\n+\r\n+        if (invocation instanceof RpcInvocation) {\r\n+            ((RpcInvocation) invocation).setInvoker(invoker);\r\n+        }\r\n+\r\n+        try {\r\n+            context.clearAfterEachInvoke(false);\r\n+            return invoker.invoke(invocation);\r\n+        } finally {\r\n+            context.clearAfterEachInvoke(true);\r\n+            // IMPORTANT! For async scenario, we must remove context from current thread, so we always create a new RpcContext for the next invoke for the same thread.\r\n+            RpcContext.removeContext(true);\r\n+            RpcContext.removeServerContext();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {\r\n+        // pass attachments to result\r\n+        appResponse.addObjectAttachments(RpcContext.getServerContext().getObjectAttachments());\r\n+    }\r\n+\r\n+    @Override\r\n+    public void onError(Throwable t, Invoker<?> invoker, Invocation invocation) {\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/GenericFilter.java", "source2": "org/apache/dubbo/rpc/filter/GenericFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,237 +1,237 @@\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.filter;\n-\n-import org.apache.dubbo.common.beanutil.JavaBeanAccessor;\n-import org.apache.dubbo.common.beanutil.JavaBeanDescriptor;\n-import org.apache.dubbo.common.beanutil.JavaBeanSerializeUtil;\n-import org.apache.dubbo.common.config.Configuration;\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.io.UnsafeByteArrayInputStream;\n-import org.apache.dubbo.common.io.UnsafeByteArrayOutputStream;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.serialize.Serialization;\n-import org.apache.dubbo.common.utils.PojoUtils;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.Filter;\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.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.service.GenericException;\n-import org.apache.dubbo.rpc.service.GenericService;\n-import org.apache.dubbo.rpc.support.ProtocolUtils;\n-\n-import java.io.IOException;\n-import java.lang.reflect.Method;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_BEAN;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_NATIVE_JAVA;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_PROTOBUF;\n-import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;\n-\n-/**\n- * GenericInvokerFilter.\n- */\n-@Activate(group = CommonConstants.PROVIDER, order = -20000)\n-public class GenericFilter implements Filter, Filter.Listener {\n-    private static final Logger logger = LoggerFactory.getLogger(GenericFilter.class);\n-\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {\n-        if ((inv.getMethodName().equals($INVOKE) || inv.getMethodName().equals($INVOKE_ASYNC))\n-                && inv.getArguments() != null\n-                && inv.getArguments().length == 3\n-                && !GenericService.class.isAssignableFrom(invoker.getInterface())) {\n-            String name = ((String) inv.getArguments()[0]).trim();\n-            String[] types = (String[]) inv.getArguments()[1];\n-            Object[] args = (Object[]) inv.getArguments()[2];\n-            try {\n-                Method method = ReflectUtils.findMethodByMethodSignature(invoker.getInterface(), name, types);\n-                Class<?>[] params = method.getParameterTypes();\n-                if (args == null) {\n-                    args = new Object[params.length];\n-                }\n-\n-                if (types == null) {\n-                    types = new String[params.length];\n-                }\n-\n-                if (args.length != types.length) {\n-                    throw new RpcException(\"GenericFilter#invoke args.length != types.length, please check your \"\n-                            + \"params\");\n-                }\n-                String generic = inv.getAttachment(GENERIC_KEY);\n-\n-                if (StringUtils.isBlank(generic)) {\n-                    generic = RpcContext.getContext().getAttachment(GENERIC_KEY);\n-                }\n-\n-                if (StringUtils.isEmpty(generic)\n-                        || ProtocolUtils.isDefaultGenericSerialization(generic)\n-                        || ProtocolUtils.isGenericReturnRawResult(generic)) {\n-                    args = PojoUtils.realize(args, params, method.getGenericParameterTypes());\n-                } else if (ProtocolUtils.isJavaGenericSerialization(generic)) {\n-                    Configuration configuration = ApplicationModel.getEnvironment().getConfiguration();\n-                    if (!configuration.getBoolean(CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE, false)) {\n-                        String notice = \"Trigger the safety barrier! \" +\n-                                \"Native Java Serializer is not allowed by default.\" +\n-                                \"This means currently maybe being attacking by others. \" +\n-                                \"If you are sure this is a mistake, \" +\n-                                \"please set `\" + CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE + \"` enable in configuration! \" +\n-                                \"Before doing so, please make sure you have configure JEP290 to prevent serialization attack.\";\n-                        logger.error(notice);\n-                        throw new RpcException(new IllegalStateException(notice));\n-                    }\n-\n-                    for (int i = 0; i < args.length; i++) {\n-                        if (byte[].class == args[i].getClass()) {\n-                            try (UnsafeByteArrayInputStream is = new UnsafeByteArrayInputStream((byte[]) args[i])) {\n-                                args[i] = ExtensionLoader.getExtensionLoader(Serialization.class)\n-                                        .getExtension(GENERIC_SERIALIZATION_NATIVE_JAVA)\n-                                        .deserialize(null, is).readObject();\n-                            } catch (Exception e) {\n-                                throw new RpcException(\"Deserialize argument [\" + (i + 1) + \"] failed.\", e);\n-                            }\n-                        } else {\n-                            throw new RpcException(\n-                                    \"Generic serialization [\" +\n-                                            GENERIC_SERIALIZATION_NATIVE_JAVA +\n-                                            \"] only support message type \" +\n-                                            byte[].class +\n-                                            \" and your message type is \" +\n-                                            args[i].getClass());\n-                        }\n-                    }\n-                } else if (ProtocolUtils.isBeanGenericSerialization(generic)) {\n-                    for (int i = 0; i < args.length; i++) {\n-                        if (args[i] instanceof JavaBeanDescriptor) {\n-                            args[i] = JavaBeanSerializeUtil.deserialize((JavaBeanDescriptor) args[i]);\n-                        } else {\n-                            throw new RpcException(\n-                                    \"Generic serialization [\" +\n-                                            GENERIC_SERIALIZATION_BEAN +\n-                                            \"] only support message type \" +\n-                                            JavaBeanDescriptor.class.getName() +\n-                                            \" and your message type is \" +\n-                                            args[i].getClass().getName());\n-                        }\n-                    }\n-                } else if (ProtocolUtils.isProtobufGenericSerialization(generic)) {\n-                    // as proto3 only accept one protobuf parameter\n-                    if (args.length == 1 && args[0] instanceof String) {\n-                        try (UnsafeByteArrayInputStream is =\n-                                     new UnsafeByteArrayInputStream(((String) args[0]).getBytes())) {\n-                            args[0] = ExtensionLoader.getExtensionLoader(Serialization.class)\n-                                    .getExtension(GENERIC_SERIALIZATION_PROTOBUF)\n-                                    .deserialize(null, is).readObject(method.getParameterTypes()[0]);\n-                        } catch (Exception e) {\n-                            throw new RpcException(\"Deserialize argument failed.\", e);\n-                        }\n-                    } else {\n-                        throw new RpcException(\n-                                \"Generic serialization [\" +\n-                                        GENERIC_SERIALIZATION_PROTOBUF +\n-                                        \"] only support one \" + String.class.getName() +\n-                                        \" argument and your message size is \" +\n-                                        args.length + \" and type is\" +\n-                                        args[0].getClass().getName());\n-                    }\n-                }\n-\n-                RpcInvocation rpcInvocation = new RpcInvocation(method, invoker.getInterface().getName(), invoker.getUrl().getProtocolServiceKey(), args, inv.getObjectAttachments(), inv.getAttributes());\n-                rpcInvocation.setInvoker(inv.getInvoker());\n-                rpcInvocation.setTargetServiceUniqueName(inv.getTargetServiceUniqueName());\n-\n-                return invoker.invoke(rpcInvocation);\n-            } catch (NoSuchMethodException | ClassNotFoundException e) {\n-                throw new RpcException(e.getMessage(), e);\n-            }\n-        }\n-        return invoker.invoke(inv);\n-    }\n-\n-    @Override\n-    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation inv) {\n-        if ((inv.getMethodName().equals($INVOKE) || inv.getMethodName().equals($INVOKE_ASYNC))\n-                && inv.getArguments() != null\n-                && inv.getArguments().length == 3\n-                && !GenericService.class.isAssignableFrom(invoker.getInterface())) {\n-\n-            String generic = inv.getAttachment(GENERIC_KEY);\n-            if (StringUtils.isBlank(generic)) {\n-                generic = RpcContext.getContext().getAttachment(GENERIC_KEY);\n-            }\n-\n-            if (appResponse.hasException()) {\n-                Throwable appException = appResponse.getException();\n-                if (appException instanceof GenericException) {\n-                    GenericException tmp = (GenericException) appException;\n-                    appException = new com.alibaba.dubbo.rpc.service.GenericException(tmp.getExceptionClass(), tmp.getExceptionMessage());\n-                }\n-                if (!(appException instanceof com.alibaba.dubbo.rpc.service.GenericException)) {\n-                    appException = new com.alibaba.dubbo.rpc.service.GenericException(appException);\n-                }\n-                appResponse.setException(appException);\n-            }\n-            if (ProtocolUtils.isJavaGenericSerialization(generic)) {\n-                try {\n-                    UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512);\n-                    ExtensionLoader.getExtensionLoader(Serialization.class).getExtension(GENERIC_SERIALIZATION_NATIVE_JAVA).serialize(null, os).writeObject(appResponse.getValue());\n-                    appResponse.setValue(os.toByteArray());\n-                } catch (IOException e) {\n-                    throw new RpcException(\n-                            \"Generic serialization [\" +\n-                                    GENERIC_SERIALIZATION_NATIVE_JAVA +\n-                                    \"] serialize result failed.\", e);\n-                }\n-            } else if (ProtocolUtils.isBeanGenericSerialization(generic)) {\n-                appResponse.setValue(JavaBeanSerializeUtil.serialize(appResponse.getValue(), JavaBeanAccessor.METHOD));\n-            } else if (ProtocolUtils.isProtobufGenericSerialization(generic)) {\n-                try {\n-                    UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512);\n-                    ExtensionLoader.getExtensionLoader(Serialization.class)\n-                            .getExtension(GENERIC_SERIALIZATION_PROTOBUF)\n-                            .serialize(null, os).writeObject(appResponse.getValue());\n-                    appResponse.setValue(os.toString());\n-                } catch (IOException e) {\n-                    throw new RpcException(\"Generic serialization [\" +\n-                            GENERIC_SERIALIZATION_PROTOBUF +\n-                            \"] serialize result failed.\", e);\n-                }\n-            } else if (ProtocolUtils.isGenericReturnRawResult(generic)) {\n-                return;\n-            } else {\n-                appResponse.setValue(PojoUtils.generalize(appResponse.getValue()));\n-            }\n-        }\n-    }\n-\n-    @Override\n-    public void onError(Throwable t, Invoker<?> invoker, Invocation invocation) {\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.filter;\r\n+\r\n+import org.apache.dubbo.common.beanutil.JavaBeanAccessor;\r\n+import org.apache.dubbo.common.beanutil.JavaBeanDescriptor;\r\n+import org.apache.dubbo.common.beanutil.JavaBeanSerializeUtil;\r\n+import org.apache.dubbo.common.config.Configuration;\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.io.UnsafeByteArrayInputStream;\r\n+import org.apache.dubbo.common.io.UnsafeByteArrayOutputStream;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.serialize.Serialization;\r\n+import org.apache.dubbo.common.utils.PojoUtils;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.Filter;\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.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.service.GenericException;\r\n+import org.apache.dubbo.rpc.service.GenericService;\r\n+import org.apache.dubbo.rpc.support.ProtocolUtils;\r\n+\r\n+import java.io.IOException;\r\n+import java.lang.reflect.Method;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_BEAN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_NATIVE_JAVA;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_PROTOBUF;\r\n+import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;\r\n+\r\n+/**\r\n+ * GenericInvokerFilter.\r\n+ */\r\n+@Activate(group = CommonConstants.PROVIDER, order = -20000)\r\n+public class GenericFilter implements Filter, Filter.Listener {\r\n+    private static final Logger logger = LoggerFactory.getLogger(GenericFilter.class);\r\n+\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {\r\n+        if ((inv.getMethodName().equals($INVOKE) || inv.getMethodName().equals($INVOKE_ASYNC))\r\n+                && inv.getArguments() != null\r\n+                && inv.getArguments().length == 3\r\n+                && !GenericService.class.isAssignableFrom(invoker.getInterface())) {\r\n+            String name = ((String) inv.getArguments()[0]).trim();\r\n+            String[] types = (String[]) inv.getArguments()[1];\r\n+            Object[] args = (Object[]) inv.getArguments()[2];\r\n+            try {\r\n+                Method method = ReflectUtils.findMethodByMethodSignature(invoker.getInterface(), name, types);\r\n+                Class<?>[] params = method.getParameterTypes();\r\n+                if (args == null) {\r\n+                    args = new Object[params.length];\r\n+                }\r\n+\r\n+                if (types == null) {\r\n+                    types = new String[params.length];\r\n+                }\r\n+\r\n+                if (args.length != types.length) {\r\n+                    throw new RpcException(\"GenericFilter#invoke args.length != types.length, please check your \"\r\n+                            + \"params\");\r\n+                }\r\n+                String generic = inv.getAttachment(GENERIC_KEY);\r\n+\r\n+                if (StringUtils.isBlank(generic)) {\r\n+                    generic = RpcContext.getContext().getAttachment(GENERIC_KEY);\r\n+                }\r\n+\r\n+                if (StringUtils.isEmpty(generic)\r\n+                        || ProtocolUtils.isDefaultGenericSerialization(generic)\r\n+                        || ProtocolUtils.isGenericReturnRawResult(generic)) {\r\n+                    args = PojoUtils.realize(args, params, method.getGenericParameterTypes());\r\n+                } else if (ProtocolUtils.isJavaGenericSerialization(generic)) {\r\n+                    Configuration configuration = ApplicationModel.getEnvironment().getConfiguration();\r\n+                    if (!configuration.getBoolean(CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE, false)) {\r\n+                        String notice = \"Trigger the safety barrier! \" +\r\n+                                \"Native Java Serializer is not allowed by default.\" +\r\n+                                \"This means currently maybe being attacking by others. \" +\r\n+                                \"If you are sure this is a mistake, \" +\r\n+                                \"please set `\" + CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE + \"` enable in configuration! \" +\r\n+                                \"Before doing so, please make sure you have configure JEP290 to prevent serialization attack.\";\r\n+                        logger.error(notice);\r\n+                        throw new RpcException(new IllegalStateException(notice));\r\n+                    }\r\n+\r\n+                    for (int i = 0; i < args.length; i++) {\r\n+                        if (byte[].class == args[i].getClass()) {\r\n+                            try (UnsafeByteArrayInputStream is = new UnsafeByteArrayInputStream((byte[]) args[i])) {\r\n+                                args[i] = ExtensionLoader.getExtensionLoader(Serialization.class)\r\n+                                        .getExtension(GENERIC_SERIALIZATION_NATIVE_JAVA)\r\n+                                        .deserialize(null, is).readObject();\r\n+                            } catch (Exception e) {\r\n+                                throw new RpcException(\"Deserialize argument [\" + (i + 1) + \"] failed.\", e);\r\n+                            }\r\n+                        } else {\r\n+                            throw new RpcException(\r\n+                                    \"Generic serialization [\" +\r\n+                                            GENERIC_SERIALIZATION_NATIVE_JAVA +\r\n+                                            \"] only support message type \" +\r\n+                                            byte[].class +\r\n+                                            \" and your message type is \" +\r\n+                                            args[i].getClass());\r\n+                        }\r\n+                    }\r\n+                } else if (ProtocolUtils.isBeanGenericSerialization(generic)) {\r\n+                    for (int i = 0; i < args.length; i++) {\r\n+                        if (args[i] instanceof JavaBeanDescriptor) {\r\n+                            args[i] = JavaBeanSerializeUtil.deserialize((JavaBeanDescriptor) args[i]);\r\n+                        } else {\r\n+                            throw new RpcException(\r\n+                                    \"Generic serialization [\" +\r\n+                                            GENERIC_SERIALIZATION_BEAN +\r\n+                                            \"] only support message type \" +\r\n+                                            JavaBeanDescriptor.class.getName() +\r\n+                                            \" and your message type is \" +\r\n+                                            args[i].getClass().getName());\r\n+                        }\r\n+                    }\r\n+                } else if (ProtocolUtils.isProtobufGenericSerialization(generic)) {\r\n+                    // as proto3 only accept one protobuf parameter\r\n+                    if (args.length == 1 && args[0] instanceof String) {\r\n+                        try (UnsafeByteArrayInputStream is =\r\n+                                     new UnsafeByteArrayInputStream(((String) args[0]).getBytes())) {\r\n+                            args[0] = ExtensionLoader.getExtensionLoader(Serialization.class)\r\n+                                    .getExtension(GENERIC_SERIALIZATION_PROTOBUF)\r\n+                                    .deserialize(null, is).readObject(method.getParameterTypes()[0]);\r\n+                        } catch (Exception e) {\r\n+                            throw new RpcException(\"Deserialize argument failed.\", e);\r\n+                        }\r\n+                    } else {\r\n+                        throw new RpcException(\r\n+                                \"Generic serialization [\" +\r\n+                                        GENERIC_SERIALIZATION_PROTOBUF +\r\n+                                        \"] only support one \" + String.class.getName() +\r\n+                                        \" argument and your message size is \" +\r\n+                                        args.length + \" and type is\" +\r\n+                                        args[0].getClass().getName());\r\n+                    }\r\n+                }\r\n+\r\n+                RpcInvocation rpcInvocation = new RpcInvocation(method, invoker.getInterface().getName(), invoker.getUrl().getProtocolServiceKey(), args, inv.getObjectAttachments(), inv.getAttributes());\r\n+                rpcInvocation.setInvoker(inv.getInvoker());\r\n+                rpcInvocation.setTargetServiceUniqueName(inv.getTargetServiceUniqueName());\r\n+\r\n+                return invoker.invoke(rpcInvocation);\r\n+            } catch (NoSuchMethodException | ClassNotFoundException e) {\r\n+                throw new RpcException(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+        return invoker.invoke(inv);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation inv) {\r\n+        if ((inv.getMethodName().equals($INVOKE) || inv.getMethodName().equals($INVOKE_ASYNC))\r\n+                && inv.getArguments() != null\r\n+                && inv.getArguments().length == 3\r\n+                && !GenericService.class.isAssignableFrom(invoker.getInterface())) {\r\n+\r\n+            String generic = inv.getAttachment(GENERIC_KEY);\r\n+            if (StringUtils.isBlank(generic)) {\r\n+                generic = RpcContext.getContext().getAttachment(GENERIC_KEY);\r\n+            }\r\n+\r\n+            if (appResponse.hasException()) {\r\n+                Throwable appException = appResponse.getException();\r\n+                if (appException instanceof GenericException) {\r\n+                    GenericException tmp = (GenericException) appException;\r\n+                    appException = new com.alibaba.dubbo.rpc.service.GenericException(tmp.getExceptionClass(), tmp.getExceptionMessage());\r\n+                }\r\n+                if (!(appException instanceof com.alibaba.dubbo.rpc.service.GenericException)) {\r\n+                    appException = new com.alibaba.dubbo.rpc.service.GenericException(appException);\r\n+                }\r\n+                appResponse.setException(appException);\r\n+            }\r\n+            if (ProtocolUtils.isJavaGenericSerialization(generic)) {\r\n+                try {\r\n+                    UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512);\r\n+                    ExtensionLoader.getExtensionLoader(Serialization.class).getExtension(GENERIC_SERIALIZATION_NATIVE_JAVA).serialize(null, os).writeObject(appResponse.getValue());\r\n+                    appResponse.setValue(os.toByteArray());\r\n+                } catch (IOException e) {\r\n+                    throw new RpcException(\r\n+                            \"Generic serialization [\" +\r\n+                                    GENERIC_SERIALIZATION_NATIVE_JAVA +\r\n+                                    \"] serialize result failed.\", e);\r\n+                }\r\n+            } else if (ProtocolUtils.isBeanGenericSerialization(generic)) {\r\n+                appResponse.setValue(JavaBeanSerializeUtil.serialize(appResponse.getValue(), JavaBeanAccessor.METHOD));\r\n+            } else if (ProtocolUtils.isProtobufGenericSerialization(generic)) {\r\n+                try {\r\n+                    UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512);\r\n+                    ExtensionLoader.getExtensionLoader(Serialization.class)\r\n+                            .getExtension(GENERIC_SERIALIZATION_PROTOBUF)\r\n+                            .serialize(null, os).writeObject(appResponse.getValue());\r\n+                    appResponse.setValue(os.toString());\r\n+                } catch (IOException e) {\r\n+                    throw new RpcException(\"Generic serialization [\" +\r\n+                            GENERIC_SERIALIZATION_PROTOBUF +\r\n+                            \"] serialize result failed.\", e);\r\n+                }\r\n+            } else if (ProtocolUtils.isGenericReturnRawResult(generic)) {\r\n+                return;\r\n+            } else {\r\n+                appResponse.setValue(PojoUtils.generalize(appResponse.getValue()));\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void onError(Throwable t, Invoker<?> invoker, Invocation invocation) {\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/TpsLimitFilter.java", "source2": "org/apache/dubbo/rpc/filter/TpsLimitFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,59 +1,59 @@\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-\n-package org.apache.dubbo.rpc.filter;\n-\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.rpc.Filter;\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.filter.tps.DefaultTPSLimiter;\n-import org.apache.dubbo.rpc.filter.tps.TPSLimiter;\n-\n-import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_RATE_KEY;\n-\n-/**\n- * TpsLimitFilter limit the TPS (transaction per second) for all method of a service or a particular method.\n- * Service or method url can define <b>tps</b> or <b>tps.interval</b> to control this control.It use {@link DefaultTPSLimiter}\n- * as it limit checker. If a provider service method is configured with <b>tps</b>(optionally with <b>tps.interval</b>),then\n- * if invocation count exceed the configured <b>tps</b> value (default is -1 which means unlimited) then invocation will get\n- * RpcException.\n- * */\n-@Activate(group = CommonConstants.PROVIDER, value = TPS_LIMIT_RATE_KEY)\n-public class TpsLimitFilter implements Filter {\n-\n-    private final TPSLimiter tpsLimiter = new DefaultTPSLimiter();\n-\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-\n-        if (!tpsLimiter.isAllowable(invoker.getUrl(), invocation)) {\n-            throw new RpcException(\n-                    \"Failed to invoke service \" +\n-                            invoker.getInterface().getName() +\n-                            \".\" +\n-                            invocation.getMethodName() +\n-                            \" because exceed max service tps.\");\n-        }\n-\n-        return invoker.invoke(invocation);\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+\r\n+package org.apache.dubbo.rpc.filter;\r\n+\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.rpc.Filter;\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.filter.tps.DefaultTPSLimiter;\r\n+import org.apache.dubbo.rpc.filter.tps.TPSLimiter;\r\n+\r\n+import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_RATE_KEY;\r\n+\r\n+/**\r\n+ * TpsLimitFilter limit the TPS (transaction per second) for all method of a service or a particular method.\r\n+ * Service or method url can define <b>tps</b> or <b>tps.interval</b> to control this control.It use {@link DefaultTPSLimiter}\r\n+ * as it limit checker. If a provider service method is configured with <b>tps</b>(optionally with <b>tps.interval</b>),then\r\n+ * if invocation count exceed the configured <b>tps</b> value (default is -1 which means unlimited) then invocation will get\r\n+ * RpcException.\r\n+ * */\r\n+@Activate(group = CommonConstants.PROVIDER, value = TPS_LIMIT_RATE_KEY)\r\n+public class TpsLimitFilter implements Filter {\r\n+\r\n+    private final TPSLimiter tpsLimiter = new DefaultTPSLimiter();\r\n+\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+\r\n+        if (!tpsLimiter.isAllowable(invoker.getUrl(), invocation)) {\r\n+            throw new RpcException(\r\n+                    \"Failed to invoke service \" +\r\n+                            invoker.getInterface().getName() +\r\n+                            \".\" +\r\n+                            invocation.getMethodName() +\r\n+                            \" because exceed max service tps.\");\r\n+        }\r\n+\r\n+        return invoker.invoke(invocation);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/tps/DefaultTPSLimiter.java", "source2": "org/apache/dubbo/rpc/filter/tps/DefaultTPSLimiter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,67 +1,67 @@\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.filter.tps;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.rpc.Invocation;\n-\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_RATE_KEY;\n-import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_INTERVAL_KEY;\n-import static org.apache.dubbo.rpc.Constants.DEFAULT_TPS_LIMIT_INTERVAL;\n-\n-/**\n- * DefaultTPSLimiter is a default implementation for tps filter. It is an in memory based implementation for storing\n- * tps information. It internally use\n- *\n- * @see org.apache.dubbo.rpc.filter.TpsLimitFilter\n- */\n-public class DefaultTPSLimiter implements TPSLimiter {\n-\n-    private final ConcurrentMap<String, StatItem> stats = new ConcurrentHashMap<String, StatItem>();\n-\n-    @Override\n-    public boolean isAllowable(URL url, Invocation invocation) {\n-        int rate = url.getParameter(TPS_LIMIT_RATE_KEY, -1);\n-        long interval = url.getParameter(TPS_LIMIT_INTERVAL_KEY, DEFAULT_TPS_LIMIT_INTERVAL);\n-        String serviceKey = url.getServiceKey();\n-        if (rate > 0) {\n-            StatItem statItem = stats.get(serviceKey);\n-            if (statItem == null) {\n-                stats.putIfAbsent(serviceKey, new StatItem(serviceKey, rate, interval));\n-                statItem = stats.get(serviceKey);\n-            } else {\n-                //rate or interval has changed, rebuild\n-                if (statItem.getRate() != rate || statItem.getInterval() != interval) {\n-                    stats.put(serviceKey, new StatItem(serviceKey, rate, interval));\n-                    statItem = stats.get(serviceKey);\n-                }\n-            }\n-            return statItem.isAllowable();\n-        } else {\n-            StatItem statItem = stats.get(serviceKey);\n-            if (statItem != null) {\n-                stats.remove(serviceKey);\n-            }\n-        }\n-\n-        return true;\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.filter.tps;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_RATE_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_INTERVAL_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.DEFAULT_TPS_LIMIT_INTERVAL;\r\n+\r\n+/**\r\n+ * DefaultTPSLimiter is a default implementation for tps filter. It is an in memory based implementation for storing\r\n+ * tps information. It internally use\r\n+ *\r\n+ * @see org.apache.dubbo.rpc.filter.TpsLimitFilter\r\n+ */\r\n+public class DefaultTPSLimiter implements TPSLimiter {\r\n+\r\n+    private final ConcurrentMap<String, StatItem> stats = new ConcurrentHashMap<String, StatItem>();\r\n+\r\n+    @Override\r\n+    public boolean isAllowable(URL url, Invocation invocation) {\r\n+        int rate = url.getParameter(TPS_LIMIT_RATE_KEY, -1);\r\n+        long interval = url.getParameter(TPS_LIMIT_INTERVAL_KEY, DEFAULT_TPS_LIMIT_INTERVAL);\r\n+        String serviceKey = url.getServiceKey();\r\n+        if (rate > 0) {\r\n+            StatItem statItem = stats.get(serviceKey);\r\n+            if (statItem == null) {\r\n+                stats.putIfAbsent(serviceKey, new StatItem(serviceKey, rate, interval));\r\n+                statItem = stats.get(serviceKey);\r\n+            } else {\r\n+                //rate or interval has changed, rebuild\r\n+                if (statItem.getRate() != rate || statItem.getInterval() != interval) {\r\n+                    stats.put(serviceKey, new StatItem(serviceKey, rate, interval));\r\n+                    statItem = stats.get(serviceKey);\r\n+                }\r\n+            }\r\n+            return statItem.isAllowable();\r\n+        } else {\r\n+            StatItem statItem = stats.get(serviceKey);\r\n+            if (statItem != null) {\r\n+                stats.remove(serviceKey);\r\n+            }\r\n+        }\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/tps/StatItem.java", "source2": "org/apache/dubbo/rpc/filter/tps/StatItem.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,92 +1,92 @@\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.filter.tps;\n-\n-import java.util.concurrent.atomic.LongAdder;\n-\n-/**\n- * Judge whether a particular invocation of service provider method should be allowed within a configured time interval.\n- * As a state it contain name of key ( e.g. method), last invocation time, interval and rate count.\n- */\n-class StatItem {\n-\n-    private String name;\n-\n-    private long lastResetTime;\n-\n-    private long interval;\n-\n-    private LongAdder token;\n-\n-    private int rate;\n-\n-    StatItem(String name, int rate, long interval) {\n-        this.name = name;\n-        this.rate = rate;\n-        this.interval = interval;\n-        this.lastResetTime = System.currentTimeMillis();\n-        this.token = buildLongAdder(rate);\n-    }\n-\n-    public boolean isAllowable() {\n-        long now = System.currentTimeMillis();\n-        if (now > lastResetTime + interval) {\n-            token = buildLongAdder(rate);\n-            lastResetTime = now;\n-        }\n-\n-        if (token.sum() < 0) {\n-            return false;\n-        }\n-        token.decrement();\n-        return true;\n-    }\n-\n-    public long getInterval() {\n-        return interval;\n-    }\n-\n-\n-    public int getRate() {\n-        return rate;\n-    }\n-\n-\n-    long getLastResetTime() {\n-        return lastResetTime;\n-    }\n-\n-    long getToken() {\n-        return token.sum();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return new StringBuilder(32).append(\"StatItem \")\n-                .append(\"[name=\").append(name).append(\", \")\n-                .append(\"rate = \").append(rate).append(\", \")\n-                .append(\"interval = \").append(interval).append(\"]\")\n-                .toString();\n-    }\n-\n-    private LongAdder buildLongAdder(int rate) {\n-        LongAdder adder = new LongAdder();\n-        adder.add(rate);\n-        return adder;\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.filter.tps;\r\n+\r\n+import java.util.concurrent.atomic.LongAdder;\r\n+\r\n+/**\r\n+ * Judge whether a particular invocation of service provider method should be allowed within a configured time interval.\r\n+ * As a state it contain name of key ( e.g. method), last invocation time, interval and rate count.\r\n+ */\r\n+class StatItem {\r\n+\r\n+    private String name;\r\n+\r\n+    private long lastResetTime;\r\n+\r\n+    private long interval;\r\n+\r\n+    private LongAdder token;\r\n+\r\n+    private int rate;\r\n+\r\n+    StatItem(String name, int rate, long interval) {\r\n+        this.name = name;\r\n+        this.rate = rate;\r\n+        this.interval = interval;\r\n+        this.lastResetTime = System.currentTimeMillis();\r\n+        this.token = buildLongAdder(rate);\r\n+    }\r\n+\r\n+    public boolean isAllowable() {\r\n+        long now = System.currentTimeMillis();\r\n+        if (now > lastResetTime + interval) {\r\n+            token = buildLongAdder(rate);\r\n+            lastResetTime = now;\r\n+        }\r\n+\r\n+        if (token.sum() < 0) {\r\n+            return false;\r\n+        }\r\n+        token.decrement();\r\n+        return true;\r\n+    }\r\n+\r\n+    public long getInterval() {\r\n+        return interval;\r\n+    }\r\n+\r\n+\r\n+    public int getRate() {\r\n+        return rate;\r\n+    }\r\n+\r\n+\r\n+    long getLastResetTime() {\r\n+        return lastResetTime;\r\n+    }\r\n+\r\n+    long getToken() {\r\n+        return token.sum();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return new StringBuilder(32).append(\"StatItem \")\r\n+                .append(\"[name=\").append(name).append(\", \")\r\n+                .append(\"rate = \").append(rate).append(\", \")\r\n+                .append(\"interval = \").append(interval).append(\"]\")\r\n+                .toString();\r\n+    }\r\n+\r\n+    private LongAdder buildLongAdder(int rate) {\r\n+        LongAdder adder = new LongAdder();\r\n+        adder.add(rate);\r\n+        return adder;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/AbstractInvoker.java", "source2": "org/apache/dubbo/rpc/protocol/AbstractInvoker.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,208 +1,208 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.Version;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.threadpool.ThreadlessExecutor;\n-import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.NetUtils;\n-import org.apache.dubbo.remoting.transport.CodecSupport;\n-import org.apache.dubbo.rpc.AsyncRpcResult;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.InvokeMode;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.Result;\n-import org.apache.dubbo.rpc.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;\n-import org.apache.dubbo.rpc.support.RpcUtils;\n-\n-import java.lang.reflect.InvocationTargetException;\n-import java.util.Collections;\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-import static org.apache.dubbo.remoting.Constants.DEFAULT_REMOTING_SERIALIZATION;\n-import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;\n-import static org.apache.dubbo.rpc.Constants.SERIALIZATION_ID_KEY;\n-\n-/**\n- * This Invoker works on Consumer side.\n- */\n-public abstract class AbstractInvoker<T> implements Invoker<T> {\n-\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    private final Class<T> type;\n-\n-    private final URL url;\n-\n-    private final Map<String, Object> attachment;\n-\n-    private volatile boolean available = true;\n-\n-    private AtomicBoolean destroyed = new AtomicBoolean(false);\n-\n-    public AbstractInvoker(Class<T> type, URL url) {\n-        this(type, url, (Map<String, Object>) null);\n-    }\n-\n-    public AbstractInvoker(Class<T> type, URL url, String[] keys) {\n-        this(type, url, convertAttachment(url, keys));\n-    }\n-\n-    public AbstractInvoker(Class<T> type, URL url, Map<String, Object> attachment) {\n-        if (type == null) {\n-            throw new IllegalArgumentException(\"service type == null\");\n-        }\n-        if (url == null) {\n-            throw new IllegalArgumentException(\"service url == null\");\n-        }\n-        this.type = type;\n-        this.url = url;\n-        this.attachment = attachment == null ? null : Collections.unmodifiableMap(attachment);\n-    }\n-\n-    private static Map<String, Object> convertAttachment(URL url, String[] keys) {\n-        if (ArrayUtils.isEmpty(keys)) {\n-            return null;\n-        }\n-        Map<String, Object> attachment = new HashMap<>();\n-        for (String key : keys) {\n-            String value = url.getParameter(key);\n-            if (value != null && value.length() > 0) {\n-                attachment.put(key, value);\n-            }\n-        }\n-        return attachment;\n-    }\n-\n-    @Override\n-    public Class<T> getInterface() {\n-        return type;\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return url;\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return available;\n-    }\n-\n-    protected void setAvailable(boolean available) {\n-        this.available = available;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        if (!destroyed.compareAndSet(false, true)) {\n-            return;\n-        }\n-        setAvailable(false);\n-    }\n-\n-    public boolean isDestroyed() {\n-        return destroyed.get();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return getInterface() + \" -> \" + (getUrl() == null ? \"\" : getUrl().toString());\n-    }\n-\n-    @Override\n-    public Result invoke(Invocation inv) throws RpcException {\n-        // if invoker is destroyed due to address refresh from registry, let's allow the current invoke to proceed\n-        if (destroyed.get()) {\n-            logger.warn(\"Invoker for service \" + this + \" on consumer \" + NetUtils.getLocalHost() + \" is destroyed, \"\n-                    + \", dubbo version is \" + Version.getVersion() + \", this invoker should not be used any longer\");\n-        }\n-        RpcInvocation invocation = (RpcInvocation) inv;\n-        invocation.setInvoker(this);\n-        if (CollectionUtils.isNotEmptyMap(attachment)) {\n-            invocation.addObjectAttachmentsIfAbsent(attachment);\n-        }\n-\n-        Map<String, Object> contextAttachments = RpcContext.getContext().getObjectAttachments();\n-        if (CollectionUtils.isNotEmptyMap(contextAttachments)) {\n-            /**\n-             * invocation.addAttachmentsIfAbsent(context){@link RpcInvocation#addAttachmentsIfAbsent(Map)}should not be used here,\n-             * because the {@link RpcContext#setAttachment(String, String)} is passed in the Filter when the call is triggered\n-             * by the built-in retry mechanism of the Dubbo. The attachment to update RpcContext will no longer work, which is\n-             * a mistake in most cases (for example, through Filter to RpcContext output traceId and spanId and other information).\n-             */\n-            invocation.addObjectAttachments(contextAttachments);\n-        }\n-\n-        invocation.setInvokeMode(RpcUtils.getInvokeMode(url, invocation));\n-        RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);\n-\n-        Byte serializationId = CodecSupport.getIDByName(getUrl().getParameter(SERIALIZATION_KEY, DEFAULT_REMOTING_SERIALIZATION));\n-        if (serializationId != null) {\n-            invocation.put(SERIALIZATION_ID_KEY, serializationId);\n-        }\n-\n-        AsyncRpcResult asyncResult;\n-        try {\n-            asyncResult = (AsyncRpcResult) doInvoke(invocation);\n-        } catch (InvocationTargetException e) { // biz exception\n-            Throwable te = e.getTargetException();\n-            if (te == null) {\n-                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\n-            } else {\n-                if (te instanceof RpcException) {\n-                    ((RpcException) te).setCode(RpcException.BIZ_EXCEPTION);\n-                }\n-                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, te, invocation);\n-            }\n-        } catch (RpcException e) {\n-            if (e.isBiz()) {\n-                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\n-            } else {\n-                throw e;\n-            }\n-        } catch (Throwable e) {\n-            asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\n-        }\n-        RpcContext.getContext().setFuture(new FutureAdapter(asyncResult.getResponseFuture()));\n-        return asyncResult;\n-    }\n-\n-    protected ExecutorService getCallbackExecutor(URL url, Invocation inv) {\n-        ExecutorService sharedExecutor = ExtensionLoader.getExtensionLoader(ExecutorRepository.class).getDefaultExtension().getExecutor(url);\n-        if (InvokeMode.SYNC == RpcUtils.getInvokeMode(getUrl(), inv)) {\n-            return new ThreadlessExecutor(sharedExecutor);\n-        } else {\n-            return sharedExecutor;\n-        }\n-    }\n-\n-    protected abstract Result doInvoke(Invocation invocation) throws Throwable;\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.Version;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.threadpool.ThreadlessExecutor;\r\n+import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;\r\n+import org.apache.dubbo.common.utils.ArrayUtils;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.NetUtils;\r\n+import org.apache.dubbo.remoting.transport.CodecSupport;\r\n+import org.apache.dubbo.rpc.AsyncRpcResult;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.InvokeMode;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.Result;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;\r\n+import org.apache.dubbo.rpc.support.RpcUtils;\r\n+\r\n+import java.lang.reflect.InvocationTargetException;\r\n+import java.util.Collections;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.concurrent.ExecutorService;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+import static org.apache.dubbo.remoting.Constants.DEFAULT_REMOTING_SERIALIZATION;\r\n+import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.SERIALIZATION_ID_KEY;\r\n+\r\n+/**\r\n+ * This Invoker works on Consumer side.\r\n+ */\r\n+public abstract class AbstractInvoker<T> implements Invoker<T> {\r\n+\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    private final Class<T> type;\r\n+\r\n+    private final URL url;\r\n+\r\n+    private final Map<String, Object> attachment;\r\n+\r\n+    private volatile boolean available = true;\r\n+\r\n+    private AtomicBoolean destroyed = new AtomicBoolean(false);\r\n+\r\n+    public AbstractInvoker(Class<T> type, URL url) {\r\n+        this(type, url, (Map<String, Object>) null);\r\n+    }\r\n+\r\n+    public AbstractInvoker(Class<T> type, URL url, String[] keys) {\r\n+        this(type, url, convertAttachment(url, keys));\r\n+    }\r\n+\r\n+    public AbstractInvoker(Class<T> type, URL url, Map<String, Object> attachment) {\r\n+        if (type == null) {\r\n+            throw new IllegalArgumentException(\"service type == null\");\r\n+        }\r\n+        if (url == null) {\r\n+            throw new IllegalArgumentException(\"service url == null\");\r\n+        }\r\n+        this.type = type;\r\n+        this.url = url;\r\n+        this.attachment = attachment == null ? null : Collections.unmodifiableMap(attachment);\r\n+    }\r\n+\r\n+    private static Map<String, Object> convertAttachment(URL url, String[] keys) {\r\n+        if (ArrayUtils.isEmpty(keys)) {\r\n+            return null;\r\n+        }\r\n+        Map<String, Object> attachment = new HashMap<>();\r\n+        for (String key : keys) {\r\n+            String value = url.getParameter(key);\r\n+            if (value != null && value.length() > 0) {\r\n+                attachment.put(key, value);\r\n+            }\r\n+        }\r\n+        return attachment;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<T> getInterface() {\r\n+        return type;\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return url;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return available;\r\n+    }\r\n+\r\n+    protected void setAvailable(boolean available) {\r\n+        this.available = available;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        if (!destroyed.compareAndSet(false, true)) {\r\n+            return;\r\n+        }\r\n+        setAvailable(false);\r\n+    }\r\n+\r\n+    public boolean isDestroyed() {\r\n+        return destroyed.get();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return getInterface() + \" -> \" + (getUrl() == null ? \"\" : getUrl().toString());\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invocation inv) throws RpcException {\r\n+        // if invoker is destroyed due to address refresh from registry, let's allow the current invoke to proceed\r\n+        if (destroyed.get()) {\r\n+            logger.warn(\"Invoker for service \" + this + \" on consumer \" + NetUtils.getLocalHost() + \" is destroyed, \"\r\n+                    + \", dubbo version is \" + Version.getVersion() + \", this invoker should not be used any longer\");\r\n+        }\r\n+        RpcInvocation invocation = (RpcInvocation) inv;\r\n+        invocation.setInvoker(this);\r\n+        if (CollectionUtils.isNotEmptyMap(attachment)) {\r\n+            invocation.addObjectAttachmentsIfAbsent(attachment);\r\n+        }\r\n+\r\n+        Map<String, Object> contextAttachments = RpcContext.getContext().getObjectAttachments();\r\n+        if (CollectionUtils.isNotEmptyMap(contextAttachments)) {\r\n+            /**\r\n+             * invocation.addAttachmentsIfAbsent(context){@link RpcInvocation#addAttachmentsIfAbsent(Map)}should not be used here,\r\n+             * because the {@link RpcContext#setAttachment(String, String)} is passed in the Filter when the call is triggered\r\n+             * by the built-in retry mechanism of the Dubbo. The attachment to update RpcContext will no longer work, which is\r\n+             * a mistake in most cases (for example, through Filter to RpcContext output traceId and spanId and other information).\r\n+             */\r\n+            invocation.addObjectAttachments(contextAttachments);\r\n+        }\r\n+\r\n+        invocation.setInvokeMode(RpcUtils.getInvokeMode(url, invocation));\r\n+        RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);\r\n+\r\n+        Byte serializationId = CodecSupport.getIDByName(getUrl().getParameter(SERIALIZATION_KEY, DEFAULT_REMOTING_SERIALIZATION));\r\n+        if (serializationId != null) {\r\n+            invocation.put(SERIALIZATION_ID_KEY, serializationId);\r\n+        }\r\n+\r\n+        AsyncRpcResult asyncResult;\r\n+        try {\r\n+            asyncResult = (AsyncRpcResult) doInvoke(invocation);\r\n+        } catch (InvocationTargetException e) { // biz exception\r\n+            Throwable te = e.getTargetException();\r\n+            if (te == null) {\r\n+                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\r\n+            } else {\r\n+                if (te instanceof RpcException) {\r\n+                    ((RpcException) te).setCode(RpcException.BIZ_EXCEPTION);\r\n+                }\r\n+                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, te, invocation);\r\n+            }\r\n+        } catch (RpcException e) {\r\n+            if (e.isBiz()) {\r\n+                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\r\n+            } else {\r\n+                throw e;\r\n+            }\r\n+        } catch (Throwable e) {\r\n+            asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\r\n+        }\r\n+        RpcContext.getContext().setFuture(new FutureAdapter(asyncResult.getResponseFuture()));\r\n+        return asyncResult;\r\n+    }\r\n+\r\n+    protected ExecutorService getCallbackExecutor(URL url, Invocation inv) {\r\n+        ExecutorService sharedExecutor = ExtensionLoader.getExtensionLoader(ExecutorRepository.class).getDefaultExtension().getExecutor(url);\r\n+        if (InvokeMode.SYNC == RpcUtils.getInvokeMode(getUrl(), inv)) {\r\n+            return new ThreadlessExecutor(sharedExecutor);\r\n+        } else {\r\n+            return sharedExecutor;\r\n+        }\r\n+    }\r\n+\r\n+    protected abstract Result doInvoke(Invocation invocation) throws Throwable;\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/AbstractProtocol.java", "source2": "org/apache/dubbo/rpc/protocol/AbstractProtocol.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,116 +1,116 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ConcurrentHashSet;\n-import org.apache.dubbo.remoting.Constants;\n-import org.apache.dubbo.rpc.Exporter;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.Protocol;\n-import org.apache.dubbo.rpc.ProtocolServer;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.support.ProtocolUtils;\n-\n-import java.util.ArrayList;\n-import java.util.Collection;\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-/**\n- * abstract ProtocolSupport.\n- */\n-public abstract class AbstractProtocol implements Protocol {\n-\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    protected final Map<String, Exporter<?>> exporterMap = new ConcurrentHashMap<String, Exporter<?>>();\n-\n-    /**\n-     * <host:port, ProtocolServer>\n-     */\n-    protected final Map<String, ProtocolServer> serverMap = new ConcurrentHashMap<>();\n-\n-    //TODO SoftReference\n-    protected final Set<Invoker<?>> invokers = new ConcurrentHashSet<Invoker<?>>();\n-\n-    protected static String serviceKey(URL url) {\n-        int port = url.getParameter(Constants.BIND_PORT_KEY, url.getPort());\n-        return serviceKey(port, url.getPath(), url.getParameter(VERSION_KEY), url.getParameter(GROUP_KEY));\n-    }\n-\n-    protected static String serviceKey(int port, String serviceName, String serviceVersion, String serviceGroup) {\n-        return ProtocolUtils.serviceKey(port, serviceName, serviceVersion, serviceGroup);\n-    }\n-\n-    public List<ProtocolServer> getServers() {\n-        return Collections.unmodifiableList(new ArrayList<>(serverMap.values()));\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        for (Invoker<?> invoker : invokers) {\n-            if (invoker != null) {\n-                invokers.remove(invoker);\n-                try {\n-                    if (logger.isInfoEnabled()) {\n-                        logger.info(\"Destroy reference: \" + invoker.getUrl());\n-                    }\n-                    invoker.destroy();\n-                } catch (Throwable t) {\n-                    logger.warn(t.getMessage(), t);\n-                }\n-            }\n-        }\n-        for (String key : new ArrayList<String>(exporterMap.keySet())) {\n-            Exporter<?> exporter = exporterMap.remove(key);\n-            if (exporter != null) {\n-                try {\n-                    if (logger.isInfoEnabled()) {\n-                        logger.info(\"Unexport service: \" + exporter.getInvoker().getUrl());\n-                    }\n-                    exporter.unexport();\n-                } catch (Throwable t) {\n-                    logger.warn(t.getMessage(), t);\n-                }\n-            }\n-        }\n-    }\n-\n-    @Override\n-    public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {\n-        return new AsyncToSyncInvoker<>(protocolBindingRefer(type, url));\n-    }\n-\n-    protected abstract <T> Invoker<T> protocolBindingRefer(Class<T> type, URL url) throws RpcException;\n-\n-    public Map<String, Exporter<?>> getExporterMap() {\n-        return exporterMap;\n-    }\n-\n-    public Collection<Exporter<?>> getExporters() {\n-        return Collections.unmodifiableCollection(exporterMap.values());\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ConcurrentHashSet;\r\n+import org.apache.dubbo.remoting.Constants;\r\n+import org.apache.dubbo.rpc.Exporter;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.Protocol;\r\n+import org.apache.dubbo.rpc.ProtocolServer;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.support.ProtocolUtils;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Collection;\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+/**\r\n+ * abstract ProtocolSupport.\r\n+ */\r\n+public abstract class AbstractProtocol implements Protocol {\r\n+\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    protected final Map<String, Exporter<?>> exporterMap = new ConcurrentHashMap<String, Exporter<?>>();\r\n+\r\n+    /**\r\n+     * <host:port, ProtocolServer>\r\n+     */\r\n+    protected final Map<String, ProtocolServer> serverMap = new ConcurrentHashMap<>();\r\n+\r\n+    //TODO SoftReference\r\n+    protected final Set<Invoker<?>> invokers = new ConcurrentHashSet<Invoker<?>>();\r\n+\r\n+    protected static String serviceKey(URL url) {\r\n+        int port = url.getParameter(Constants.BIND_PORT_KEY, url.getPort());\r\n+        return serviceKey(port, url.getPath(), url.getParameter(VERSION_KEY), url.getParameter(GROUP_KEY));\r\n+    }\r\n+\r\n+    protected static String serviceKey(int port, String serviceName, String serviceVersion, String serviceGroup) {\r\n+        return ProtocolUtils.serviceKey(port, serviceName, serviceVersion, serviceGroup);\r\n+    }\r\n+\r\n+    public List<ProtocolServer> getServers() {\r\n+        return Collections.unmodifiableList(new ArrayList<>(serverMap.values()));\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        for (Invoker<?> invoker : invokers) {\r\n+            if (invoker != null) {\r\n+                invokers.remove(invoker);\r\n+                try {\r\n+                    if (logger.isInfoEnabled()) {\r\n+                        logger.info(\"Destroy reference: \" + invoker.getUrl());\r\n+                    }\r\n+                    invoker.destroy();\r\n+                } catch (Throwable t) {\r\n+                    logger.warn(t.getMessage(), t);\r\n+                }\r\n+            }\r\n+        }\r\n+        for (String key : new ArrayList<String>(exporterMap.keySet())) {\r\n+            Exporter<?> exporter = exporterMap.remove(key);\r\n+            if (exporter != null) {\r\n+                try {\r\n+                    if (logger.isInfoEnabled()) {\r\n+                        logger.info(\"Unexport service: \" + exporter.getInvoker().getUrl());\r\n+                    }\r\n+                    exporter.unexport();\r\n+                } catch (Throwable t) {\r\n+                    logger.warn(t.getMessage(), t);\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {\r\n+        return new AsyncToSyncInvoker<>(protocolBindingRefer(type, url));\r\n+    }\r\n+\r\n+    protected abstract <T> Invoker<T> protocolBindingRefer(Class<T> type, URL url) throws RpcException;\r\n+\r\n+    public Map<String, Exporter<?>> getExporterMap() {\r\n+        return exporterMap;\r\n+    }\r\n+\r\n+    public Collection<Exporter<?>> getExporters() {\r\n+        return Collections.unmodifiableCollection(exporterMap.values());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/AsyncToSyncInvoker.java", "source2": "org/apache/dubbo/rpc/protocol/AsyncToSyncInvoker.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,102 +1,102 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.remoting.RemotingException;\n-import org.apache.dubbo.remoting.TimeoutException;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.InvokeMode;\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.RpcInvocation;\n-\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.TimeUnit;\n-\n-/**\n- * This class will work as a wrapper wrapping outside of each protocol invoker.\n- *\n- * @param <T>\n- */\n-public class AsyncToSyncInvoker<T> implements Invoker<T> {\n-\n-    private Invoker<T> invoker;\n-\n-    public AsyncToSyncInvoker(Invoker<T> invoker) {\n-        this.invoker = invoker;\n-    }\n-\n-    @Override\n-    public Class<T> getInterface() {\n-        return invoker.getInterface();\n-    }\n-\n-    @Override\n-    public Result invoke(Invocation invocation) throws RpcException {\n-        Result asyncResult = invoker.invoke(invocation);\n-\n-        try {\n-            if (InvokeMode.SYNC == ((RpcInvocation) invocation).getInvokeMode()) {\n-                /**\n-                 * NOTICE!\n-                 * must call {@link java.util.concurrent.CompletableFuture#get(long, TimeUnit)} because\n-                 * {@link java.util.concurrent.CompletableFuture#get()} was proved to have serious performance drop.\n-                 */\n-                asyncResult.get(Integer.MAX_VALUE, TimeUnit.MILLISECONDS);\n-            }\n-        } catch (InterruptedException e) {\n-            throw new RpcException(\"Interrupted unexpectedly while waiting for remote result to return!  method: \" +\n-                    invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-        } catch (ExecutionException e) {\n-            Throwable t = e.getCause();\n-            if (t instanceof TimeoutException) {\n-                throw new RpcException(RpcException.TIMEOUT_EXCEPTION, \"Invoke remote method timeout. method: \" +\n-                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-            } else if (t instanceof RemotingException) {\n-                throw new RpcException(RpcException.NETWORK_EXCEPTION, \"Failed to invoke remote method: \" +\n-                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-            } else {\n-                throw new RpcException(RpcException.UNKNOWN_EXCEPTION, \"Fail to invoke remote method: \" +\n-                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-            }\n-        } catch (Throwable e) {\n-            throw new RpcException(e.getMessage(), e);\n-        }\n-        return asyncResult;\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return invoker.getUrl();\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return invoker.isAvailable();\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        invoker.destroy();\n-    }\n-\n-    public Invoker<T> getInvoker() {\n-        return invoker;\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.remoting.RemotingException;\r\n+import org.apache.dubbo.remoting.TimeoutException;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.InvokeMode;\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.RpcInvocation;\r\n+\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+/**\r\n+ * This class will work as a wrapper wrapping outside of each protocol invoker.\r\n+ *\r\n+ * @param <T>\r\n+ */\r\n+public class AsyncToSyncInvoker<T> implements Invoker<T> {\r\n+\r\n+    private Invoker<T> invoker;\r\n+\r\n+    public AsyncToSyncInvoker(Invoker<T> invoker) {\r\n+        this.invoker = invoker;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<T> getInterface() {\r\n+        return invoker.getInterface();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invocation invocation) throws RpcException {\r\n+        Result asyncResult = invoker.invoke(invocation);\r\n+\r\n+        try {\r\n+            if (InvokeMode.SYNC == ((RpcInvocation) invocation).getInvokeMode()) {\r\n+                /**\r\n+                 * NOTICE!\r\n+                 * must call {@link java.util.concurrent.CompletableFuture#get(long, TimeUnit)} because\r\n+                 * {@link java.util.concurrent.CompletableFuture#get()} was proved to have serious performance drop.\r\n+                 */\r\n+                asyncResult.get(Integer.MAX_VALUE, TimeUnit.MILLISECONDS);\r\n+            }\r\n+        } catch (InterruptedException e) {\r\n+            throw new RpcException(\"Interrupted unexpectedly while waiting for remote result to return!  method: \" +\r\n+                    invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+        } catch (ExecutionException e) {\r\n+            Throwable t = e.getCause();\r\n+            if (t instanceof TimeoutException) {\r\n+                throw new RpcException(RpcException.TIMEOUT_EXCEPTION, \"Invoke remote method timeout. method: \" +\r\n+                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+            } else if (t instanceof RemotingException) {\r\n+                throw new RpcException(RpcException.NETWORK_EXCEPTION, \"Failed to invoke remote method: \" +\r\n+                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+            } else {\r\n+                throw new RpcException(RpcException.UNKNOWN_EXCEPTION, \"Fail to invoke remote method: \" +\r\n+                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+            }\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(e.getMessage(), e);\r\n+        }\r\n+        return asyncResult;\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return invoker.getUrl();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return invoker.isAvailable();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        invoker.destroy();\r\n+    }\r\n+\r\n+    public Invoker<T> getInvoker() {\r\n+        return invoker;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/FilterNode.java", "source2": "org/apache/dubbo/rpc/protocol/FilterNode.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,117 +1,117 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.rpc.Filter;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.ListenableFilter;\n-import org.apache.dubbo.rpc.Result;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-/**\n- * @see org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper\n- *\n- */\n-class FilterNode<T> implements Invoker<T>{\n-    private final Invoker<T> invoker;\n-    private final Invoker<T> next;\n-    private final Filter filter;\n-    \n-    public FilterNode(final Invoker<T> invoker, final Invoker<T> next, final Filter filter) {\n-        this.invoker = invoker;\n-        this.next = next;\n-        this.filter = filter;\n-    }\n-\n-    @Override\n-    public Class<T> getInterface() {\n-        return invoker.getInterface();\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return invoker.getUrl();\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return invoker.isAvailable();\n-    }\n-\n-    @Override\n-    public Result invoke(Invocation invocation) throws RpcException {\n-        Result asyncResult;\n-        try {\n-            asyncResult = filter.invoke(next, invocation);\n-        } catch (Exception e) {\n-            if (filter instanceof ListenableFilter) {\n-                ListenableFilter listenableFilter = ((ListenableFilter) filter);\n-                try {\n-                    Filter.Listener listener = listenableFilter.listener(invocation);\n-                    if (listener != null) {\n-                        listener.onError(e, invoker, invocation);\n-                    }\n-                } finally {\n-                    listenableFilter.removeListener(invocation);\n-                }\n-            } else if (filter instanceof Filter.Listener) {\n-                Filter.Listener listener = (Filter.Listener) filter;\n-                listener.onError(e, invoker, invocation);\n-            }\n-            throw e;\n-        } finally {\n-\n-        }\n-        return asyncResult.whenCompleteWithContext((r, t) -> {\n-            if (filter instanceof ListenableFilter) {\n-                ListenableFilter listenableFilter = ((ListenableFilter) filter);\n-                Filter.Listener listener = listenableFilter.listener(invocation);\n-                try {\n-                    if (listener != null) {\n-                        if (t == null) {\n-                            listener.onResponse(r, invoker, invocation);\n-                        } else {\n-                            listener.onError(t, invoker, invocation);\n-                        }\n-                    }\n-                } finally {\n-                    listenableFilter.removeListener(invocation);\n-                }\n-            } else if (filter instanceof Filter.Listener) {\n-                Filter.Listener listener = (Filter.Listener) filter;\n-                if (t == null) {\n-                    listener.onResponse(r, invoker, invocation);\n-                } else {\n-                    listener.onError(t, invoker, invocation);\n-                }\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        invoker.destroy();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return invoker.toString();\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.rpc.Filter;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.ListenableFilter;\r\n+import org.apache.dubbo.rpc.Result;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+/**\r\n+ * @see org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper\r\n+ *\r\n+ */\r\n+class FilterNode<T> implements Invoker<T>{\r\n+    private final Invoker<T> invoker;\r\n+    private final Invoker<T> next;\r\n+    private final Filter filter;\r\n+    \r\n+    public FilterNode(final Invoker<T> invoker, final Invoker<T> next, final Filter filter) {\r\n+        this.invoker = invoker;\r\n+        this.next = next;\r\n+        this.filter = filter;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<T> getInterface() {\r\n+        return invoker.getInterface();\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return invoker.getUrl();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return invoker.isAvailable();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invocation invocation) throws RpcException {\r\n+        Result asyncResult;\r\n+        try {\r\n+            asyncResult = filter.invoke(next, invocation);\r\n+        } catch (Exception e) {\r\n+            if (filter instanceof ListenableFilter) {\r\n+                ListenableFilter listenableFilter = ((ListenableFilter) filter);\r\n+                try {\r\n+                    Filter.Listener listener = listenableFilter.listener(invocation);\r\n+                    if (listener != null) {\r\n+                        listener.onError(e, invoker, invocation);\r\n+                    }\r\n+                } finally {\r\n+                    listenableFilter.removeListener(invocation);\r\n+                }\r\n+            } else if (filter instanceof Filter.Listener) {\r\n+                Filter.Listener listener = (Filter.Listener) filter;\r\n+                listener.onError(e, invoker, invocation);\r\n+            }\r\n+            throw e;\r\n+        } finally {\r\n+\r\n+        }\r\n+        return asyncResult.whenCompleteWithContext((r, t) -> {\r\n+            if (filter instanceof ListenableFilter) {\r\n+                ListenableFilter listenableFilter = ((ListenableFilter) filter);\r\n+                Filter.Listener listener = listenableFilter.listener(invocation);\r\n+                try {\r\n+                    if (listener != null) {\r\n+                        if (t == null) {\r\n+                            listener.onResponse(r, invoker, invocation);\r\n+                        } else {\r\n+                            listener.onError(t, invoker, invocation);\r\n+                        }\r\n+                    }\r\n+                } finally {\r\n+                    listenableFilter.removeListener(invocation);\r\n+                }\r\n+            } else if (filter instanceof Filter.Listener) {\r\n+                Filter.Listener listener = (Filter.Listener) filter;\r\n+                if (t == null) {\r\n+                    listener.onResponse(r, invoker, invocation);\r\n+                } else {\r\n+                    listener.onError(t, invoker, invocation);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        invoker.destroy();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return invoker.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/dubbo/FutureAdapter.java", "source2": "org/apache/dubbo/rpc/protocol/dubbo/FutureAdapter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,99 +1,99 @@\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.dubbo;\n-\n-import org.apache.dubbo.rpc.AppResponse;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.CompletionException;\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-\n-/**\n- * This is the type of the Future instance users get in an async call:\n- * 1. unwrap AppResponse in appResponseFuture and convert to plain biz result represented by FutureAdapter.\n- * 2. customized behaviors meaningful for RPC, for example, {@link #cancel(boolean)}\n- */\n-public class FutureAdapter<V> extends CompletableFuture<V> {\n-\n-    private CompletableFuture<AppResponse> appResponseFuture;\n-\n-    public FutureAdapter(CompletableFuture<AppResponse> future) {\n-        this.appResponseFuture = future;\n-        future.whenComplete((appResponse, t) -> {\n-            if (t != null) {\n-                if (t instanceof CompletionException) {\n-                    t = t.getCause();\n-                }\n-                this.completeExceptionally(t);\n-            } else {\n-                if (appResponse.hasException()) {\n-                    this.completeExceptionally(appResponse.getException());\n-                } else {\n-                    this.complete((V) appResponse.getValue());\n-                }\n-            }\n-        });\n-    }\n-\n-    // TODO figure out the meaning of cancel in DefaultFuture.\n-    @Override\n-    public boolean cancel(boolean mayInterruptIfRunning) {\n-//        Invocation invocation = invocationSoftReference.get();\n-//        if (invocation != null) {\n-//            invocation.getInvoker().invoke(cancel);\n-//        }\n-        return appResponseFuture.cancel(mayInterruptIfRunning);\n-    }\n-\n-    @Override\n-    public boolean isCancelled() {\n-        return appResponseFuture.isCancelled();\n-    }\n-\n-    @Override\n-    public boolean isDone() {\n-        return super.isDone();\n-    }\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public V get() throws InterruptedException, ExecutionException {\n-        try {\n-            return super.get();\n-        } catch (ExecutionException | InterruptedException e) {\n-            throw e;\n-        } catch (Throwable e) {\n-            throw new RpcException(e);\n-        }\n-    }\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\n-        try {\n-            return super.get(timeout, unit);\n-        } catch (TimeoutException | ExecutionException | InterruptedException e) {\n-            throw e;\n-        } catch (Throwable e) {\n-            throw new RpcException(e);\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.dubbo;\r\n+\r\n+import org.apache.dubbo.rpc.AppResponse;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.CompletionException;\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+\r\n+/**\r\n+ * This is the type of the Future instance users get in an async call:\r\n+ * 1. unwrap AppResponse in appResponseFuture and convert to plain biz result represented by FutureAdapter.\r\n+ * 2. customized behaviors meaningful for RPC, for example, {@link #cancel(boolean)}\r\n+ */\r\n+public class FutureAdapter<V> extends CompletableFuture<V> {\r\n+\r\n+    private CompletableFuture<AppResponse> appResponseFuture;\r\n+\r\n+    public FutureAdapter(CompletableFuture<AppResponse> future) {\r\n+        this.appResponseFuture = future;\r\n+        future.whenComplete((appResponse, t) -> {\r\n+            if (t != null) {\r\n+                if (t instanceof CompletionException) {\r\n+                    t = t.getCause();\r\n+                }\r\n+                this.completeExceptionally(t);\r\n+            } else {\r\n+                if (appResponse.hasException()) {\r\n+                    this.completeExceptionally(appResponse.getException());\r\n+                } else {\r\n+                    this.complete((V) appResponse.getValue());\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    // TODO figure out the meaning of cancel in DefaultFuture.\r\n+    @Override\r\n+    public boolean cancel(boolean mayInterruptIfRunning) {\r\n+//        Invocation invocation = invocationSoftReference.get();\r\n+//        if (invocation != null) {\r\n+//            invocation.getInvoker().invoke(cancel);\r\n+//        }\r\n+        return appResponseFuture.cancel(mayInterruptIfRunning);\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isCancelled() {\r\n+        return appResponseFuture.isCancelled();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isDone() {\r\n+        return super.isDone();\r\n+    }\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public V get() throws InterruptedException, ExecutionException {\r\n+        try {\r\n+            return super.get();\r\n+        } catch (ExecutionException | InterruptedException e) {\r\n+            throw e;\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r\n+        try {\r\n+            return super.get(timeout, unit);\r\n+        } catch (TimeoutException | ExecutionException | InterruptedException e) {\r\n+            throw e;\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/dubbo/package-info.java", "source2": "org/apache/dubbo/rpc/protocol/dubbo/package-info.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,22 +1,22 @@\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-\n-/**\n- * {@link org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter} was in dubbo-rpc-dubbo module,\n- * considering some users will use this class directly, keep the package not changed.\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+\r\n+/**\r\n+ * {@link org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter} was in dubbo-rpc-dubbo module,\r\n+ * considering some users will use this class directly, keep the package not changed.\r\n+ */\r\n package org.apache.dubbo.rpc.protocol.dubbo;\n"}, {"source1": "org/apache/dubbo/rpc/proxy/AbstractProxyInvoker.java", "source2": "org/apache/dubbo/rpc/proxy/AbstractProxyInvoker.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,127 +1,127 @@\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.proxy;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.rpc.AppResponse;\n-import org.apache.dubbo.rpc.AsyncContextImpl;\n-import org.apache.dubbo.rpc.AsyncRpcResult;\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.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-import java.lang.reflect.InvocationTargetException;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.CompletionException;\n-\n-/**\n- * This Invoker works on provider side, delegates RPC to interface implementation.\n- */\n-public abstract class AbstractProxyInvoker<T> implements Invoker<T> {\n-    Logger logger = LoggerFactory.getLogger(AbstractProxyInvoker.class);\n-\n-    private final T proxy;\n-\n-    private final Class<T> type;\n-\n-    private final URL url;\n-\n-    public AbstractProxyInvoker(T proxy, Class<T> type, URL url) {\n-        if (proxy == null) {\n-            throw new IllegalArgumentException(\"proxy == null\");\n-        }\n-        if (type == null) {\n-            throw new IllegalArgumentException(\"interface == null\");\n-        }\n-        if (!type.isInstance(proxy)) {\n-            throw new IllegalArgumentException(proxy.getClass().getName() + \" not implement interface \" + type);\n-        }\n-        this.proxy = proxy;\n-        this.type = type;\n-        this.url = url;\n-    }\n-\n-    @Override\n-    public Class<T> getInterface() {\n-        return type;\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return url;\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return true;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-    }\n-\n-    @Override\n-    public Result invoke(Invocation invocation) throws RpcException {\n-        try {\n-            Object value = doInvoke(proxy, invocation.getMethodName(), invocation.getParameterTypes(), invocation.getArguments());\n-            CompletableFuture<Object> future = wrapWithFuture(value);\n-            CompletableFuture<AppResponse> appResponseFuture = future.handle((obj, t) -> {\n-                AppResponse result = new AppResponse(invocation);\n-                if (t != null) {\n-                    if (t instanceof CompletionException) {\n-                        result.setException(t.getCause());\n-                    } else {\n-                        result.setException(t);\n-                    }\n-                } else {\n-                    result.setValue(obj);\n-                }\n-                return result;\n-            });\n-            return new AsyncRpcResult(appResponseFuture, invocation);\n-        } catch (InvocationTargetException e) {\n-            if (RpcContext.getContext().isAsyncStarted() && !RpcContext.getContext().stopAsync()) {\n-                logger.error(\"Provider async started, but got an exception from the original method, cannot write the exception back to consumer because an async result may have returned the new thread.\", e);\n-            }\n-            return AsyncRpcResult.newDefaultAsyncResult(null, e.getTargetException(), invocation);\n-        } catch (Throwable e) {\n-            throw new RpcException(\"Failed to invoke remote proxy method \" + invocation.getMethodName() + \" to \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-\tprivate CompletableFuture<Object> wrapWithFuture(Object value) {\n-        if (RpcContext.getContext().isAsyncStarted()) {\n-            return ((AsyncContextImpl)(RpcContext.getContext().getAsyncContext())).getInternalFuture();\n-        } else if (value instanceof CompletableFuture) {\n-            return (CompletableFuture<Object>) value;\n-        }\n-        return CompletableFuture.completedFuture(value);\n-    }\n-\n-    protected abstract Object doInvoke(T proxy, String methodName, Class<?>[] parameterTypes, Object[] arguments) throws Throwable;\n-\n-    @Override\n-    public String toString() {\n-        return getInterface() + \" -> \" + (getUrl() == null ? \" \" : getUrl().toString());\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.proxy;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.rpc.AppResponse;\r\n+import org.apache.dubbo.rpc.AsyncContextImpl;\r\n+import org.apache.dubbo.rpc.AsyncRpcResult;\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.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+import java.lang.reflect.InvocationTargetException;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.CompletionException;\r\n+\r\n+/**\r\n+ * This Invoker works on provider side, delegates RPC to interface implementation.\r\n+ */\r\n+public abstract class AbstractProxyInvoker<T> implements Invoker<T> {\r\n+    Logger logger = LoggerFactory.getLogger(AbstractProxyInvoker.class);\r\n+\r\n+    private final T proxy;\r\n+\r\n+    private final Class<T> type;\r\n+\r\n+    private final URL url;\r\n+\r\n+    public AbstractProxyInvoker(T proxy, Class<T> type, URL url) {\r\n+        if (proxy == null) {\r\n+            throw new IllegalArgumentException(\"proxy == null\");\r\n+        }\r\n+        if (type == null) {\r\n+            throw new IllegalArgumentException(\"interface == null\");\r\n+        }\r\n+        if (!type.isInstance(proxy)) {\r\n+            throw new IllegalArgumentException(proxy.getClass().getName() + \" not implement interface \" + type);\r\n+        }\r\n+        this.proxy = proxy;\r\n+        this.type = type;\r\n+        this.url = url;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<T> getInterface() {\r\n+        return type;\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return url;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invocation invocation) throws RpcException {\r\n+        try {\r\n+            Object value = doInvoke(proxy, invocation.getMethodName(), invocation.getParameterTypes(), invocation.getArguments());\r\n+            CompletableFuture<Object> future = wrapWithFuture(value);\r\n+            CompletableFuture<AppResponse> appResponseFuture = future.handle((obj, t) -> {\r\n+                AppResponse result = new AppResponse(invocation);\r\n+                if (t != null) {\r\n+                    if (t instanceof CompletionException) {\r\n+                        result.setException(t.getCause());\r\n+                    } else {\r\n+                        result.setException(t);\r\n+                    }\r\n+                } else {\r\n+                    result.setValue(obj);\r\n+                }\r\n+                return result;\r\n+            });\r\n+            return new AsyncRpcResult(appResponseFuture, invocation);\r\n+        } catch (InvocationTargetException e) {\r\n+            if (RpcContext.getContext().isAsyncStarted() && !RpcContext.getContext().stopAsync()) {\r\n+                logger.error(\"Provider async started, but got an exception from the original method, cannot write the exception back to consumer because an async result may have returned the new thread.\", e);\r\n+            }\r\n+            return AsyncRpcResult.newDefaultAsyncResult(null, e.getTargetException(), invocation);\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(\"Failed to invoke remote proxy method \" + invocation.getMethodName() + \" to \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+\tprivate CompletableFuture<Object> wrapWithFuture(Object value) {\r\n+        if (RpcContext.getContext().isAsyncStarted()) {\r\n+            return ((AsyncContextImpl)(RpcContext.getContext().getAsyncContext())).getInternalFuture();\r\n+        } else if (value instanceof CompletableFuture) {\r\n+            return (CompletableFuture<Object>) value;\r\n+        }\r\n+        return CompletableFuture.completedFuture(value);\r\n+    }\r\n+\r\n+    protected abstract Object doInvoke(T proxy, String methodName, Class<?>[] parameterTypes, Object[] arguments) throws Throwable;\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return getInterface() + \" -> \" + (getUrl() == null ? \" \" : getUrl().toString());\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java", "source2": "org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,98 +1,98 @@\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.proxy;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.rpc.Constants;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.RpcContext;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ConsumerModel;\n-\n-import java.lang.reflect.Field;\n-import java.lang.reflect.InvocationHandler;\n-import java.lang.reflect.Method;\n-\n-/**\n- * InvokerHandler\n- */\n-public class InvokerInvocationHandler implements InvocationHandler {\n-    private static final Logger logger = LoggerFactory.getLogger(InvokerInvocationHandler.class);\n-    private final Invoker<?> invoker;\n-    private ConsumerModel consumerModel;\n-    private URL url;\n-    private String protocolServiceKey;\n-\n-    public static Field stackTraceField;\n-\n-    static {\n-        try {\n-            stackTraceField = Throwable.class.getDeclaredField(\"stackTrace\");\n-            ReflectUtils.makeAccessible(stackTraceField);\n-        } catch (NoSuchFieldException e) {\n-            // ignore\n-        }\n-    }\n-\n-    public InvokerInvocationHandler(Invoker<?> handler) {\n-        this.invoker = handler;\n-        this.url = invoker.getUrl();\n-        String serviceKey = this.url.getServiceKey();\n-        this.protocolServiceKey = this.url.getProtocolServiceKey();\n-        if (serviceKey != null) {\n-            this.consumerModel = ApplicationModel.getConsumerModel(serviceKey);\n-        }\n-    }\n-\n-    @Override\n-    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n-        if (method.getDeclaringClass() == Object.class) {\n-            return method.invoke(invoker, args);\n-        }\n-        String methodName = method.getName();\n-        Class<?>[] parameterTypes = method.getParameterTypes();\n-        if (parameterTypes.length == 0) {\n-            if (\"toString\".equals(methodName)) {\n-                return invoker.toString();\n-            } else if (\"$destroy\".equals(methodName)) {\n-                invoker.destroy();\n-                return null;\n-            } else if (\"hashCode\".equals(methodName)) {\n-                return invoker.hashCode();\n-            }\n-        } else if (parameterTypes.length == 1 && \"equals\".equals(methodName)) {\n-            return invoker.equals(args[0]);\n-        }\n-        RpcInvocation rpcInvocation = new RpcInvocation(method, invoker.getInterface().getName(), protocolServiceKey, args);\n-        String serviceKey = invoker.getUrl().getServiceKey();\n-        rpcInvocation.setTargetServiceUniqueName(serviceKey);\n-\n-        // invoker.getUrl() returns consumer url.\n-        RpcContext.setRpcContext(invoker.getUrl());\n-\n-        if (consumerModel != null) {\n-            rpcInvocation.put(Constants.CONSUMER_MODEL, consumerModel);\n-            rpcInvocation.put(Constants.METHOD_MODEL, consumerModel.getMethodModel(method));\n-        }\n-\n-        return invoker.invoke(rpcInvocation).recreate();\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.proxy;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.rpc.Constants;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ConsumerModel;\r\n+\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.InvocationHandler;\r\n+import java.lang.reflect.Method;\r\n+\r\n+/**\r\n+ * InvokerHandler\r\n+ */\r\n+public class InvokerInvocationHandler implements InvocationHandler {\r\n+    private static final Logger logger = LoggerFactory.getLogger(InvokerInvocationHandler.class);\r\n+    private final Invoker<?> invoker;\r\n+    private ConsumerModel consumerModel;\r\n+    private URL url;\r\n+    private String protocolServiceKey;\r\n+\r\n+    public static Field stackTraceField;\r\n+\r\n+    static {\r\n+        try {\r\n+            stackTraceField = Throwable.class.getDeclaredField(\"stackTrace\");\r\n+            ReflectUtils.makeAccessible(stackTraceField);\r\n+        } catch (NoSuchFieldException e) {\r\n+            // ignore\r\n+        }\r\n+    }\r\n+\r\n+    public InvokerInvocationHandler(Invoker<?> handler) {\r\n+        this.invoker = handler;\r\n+        this.url = invoker.getUrl();\r\n+        String serviceKey = this.url.getServiceKey();\r\n+        this.protocolServiceKey = this.url.getProtocolServiceKey();\r\n+        if (serviceKey != null) {\r\n+            this.consumerModel = ApplicationModel.getConsumerModel(serviceKey);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\r\n+        if (method.getDeclaringClass() == Object.class) {\r\n+            return method.invoke(invoker, args);\r\n+        }\r\n+        String methodName = method.getName();\r\n+        Class<?>[] parameterTypes = method.getParameterTypes();\r\n+        if (parameterTypes.length == 0) {\r\n+            if (\"toString\".equals(methodName)) {\r\n+                return invoker.toString();\r\n+            } else if (\"$destroy\".equals(methodName)) {\r\n+                invoker.destroy();\r\n+                return null;\r\n+            } else if (\"hashCode\".equals(methodName)) {\r\n+                return invoker.hashCode();\r\n+            }\r\n+        } else if (parameterTypes.length == 1 && \"equals\".equals(methodName)) {\r\n+            return invoker.equals(args[0]);\r\n+        }\r\n+        RpcInvocation rpcInvocation = new RpcInvocation(method, invoker.getInterface().getName(), protocolServiceKey, args);\r\n+        String serviceKey = invoker.getUrl().getServiceKey();\r\n+        rpcInvocation.setTargetServiceUniqueName(serviceKey);\r\n+\r\n+        // invoker.getUrl() returns consumer url.\r\n+        RpcContext.setRpcContext(invoker.getUrl());\r\n+\r\n+        if (consumerModel != null) {\r\n+            rpcInvocation.put(Constants.CONSUMER_MODEL, consumerModel);\r\n+            rpcInvocation.put(Constants.METHOD_MODEL, consumerModel.getMethodModel(method));\r\n+        }\r\n+\r\n+        return invoker.invoke(rpcInvocation).recreate();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java", "source2": "org/apache/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,52 +1,52 @@\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.proxy.javassist;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.bytecode.Proxy;\n-import org.apache.dubbo.common.bytecode.Wrapper;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.proxy.AbstractProxyFactory;\n-import org.apache.dubbo.rpc.proxy.AbstractProxyInvoker;\n-import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;\n-\n-/**\n- * JavassistRpcProxyFactory\n- */\n-public class JavassistProxyFactory extends AbstractProxyFactory {\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> T getProxy(Invoker<T> invoker, Class<?>[] interfaces) {\n-        return (T) Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker));\n-    }\n-\n-    @Override\n-    public <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) {\n-        // TODO Wrapper cannot handle this scenario correctly: the classname contains '$'\n-        final Wrapper wrapper = Wrapper.getWrapper(proxy.getClass().getName().indexOf('$') < 0 ? proxy.getClass() : type);\n-        return new AbstractProxyInvoker<T>(proxy, type, url) {\n-            @Override\n-            protected Object doInvoke(T proxy, String methodName,\n-                                      Class<?>[] parameterTypes,\n-                                      Object[] arguments) throws Throwable {\n-                return wrapper.invokeMethod(proxy, methodName, parameterTypes, arguments);\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.proxy.javassist;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.bytecode.Proxy;\r\n+import org.apache.dubbo.common.bytecode.Wrapper;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.proxy.AbstractProxyFactory;\r\n+import org.apache.dubbo.rpc.proxy.AbstractProxyInvoker;\r\n+import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;\r\n+\r\n+/**\r\n+ * JavassistRpcProxyFactory\r\n+ */\r\n+public class JavassistProxyFactory extends AbstractProxyFactory {\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> T getProxy(Invoker<T> invoker, Class<?>[] interfaces) {\r\n+        return (T) Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker));\r\n+    }\r\n+\r\n+    @Override\r\n+    public <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) {\r\n+        // TODO Wrapper cannot handle this scenario correctly: the classname contains '$'\r\n+        final Wrapper wrapper = Wrapper.getWrapper(proxy.getClass().getName().indexOf('$') < 0 ? proxy.getClass() : type);\r\n+        return new AbstractProxyInvoker<T>(proxy, type, url) {\r\n+            @Override\r\n+            protected Object doInvoke(T proxy, String methodName,\r\n+                                      Class<?>[] parameterTypes,\r\n+                                      Object[] arguments) throws Throwable {\r\n+                return wrapper.invokeMethod(proxy, methodName, parameterTypes, arguments);\r\n+            }\r\n+        };\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/support/AccessLogData.java", "source2": "org/apache/dubbo/rpc/support/AccessLogData.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,281 +1,281 @@\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.support;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.RpcContext;\n-\n-import com.alibaba.fastjson.JSON;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-import java.text.DateFormat;\n-import java.text.SimpleDateFormat;\n-import java.util.Arrays;\n-import java.util.Date;\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-/**\n- * AccessLogData is a container for log event data. In internally uses map and store each filed of log as value. It\n- * does not generate any dynamic value e.g. time stamp, local jmv machine host address etc. It does not allow any null\n- * or empty key.\n- *\n- * Note: since its date formatter is a singleton, make sure to run it in single thread only.\n- */\n-public final class AccessLogData {\n-\n-    private static final String MESSAGE_DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\n-    private static final DateFormat MESSAGE_DATE_FORMATTER = new SimpleDateFormat(MESSAGE_DATE_FORMAT);\n-\n-    private static final String VERSION = \"version\";\n-    private static final String GROUP = \"group\";\n-    private static final String SERVICE = \"service\";\n-    private static final String METHOD_NAME = \"method-name\";\n-    private static final String INVOCATION_TIME = \"invocation-time\";\n-    private static final String TYPES = \"types\";\n-    private static final String ARGUMENTS = \"arguments\";\n-    private static final String REMOTE_HOST = \"remote-host\";\n-    private static final String REMOTE_PORT = \"remote-port\";\n-    private static final String LOCAL_HOST = \"localhost\";\n-    private static final String LOCAL_PORT = \"local-port\";\n-\n-    /**\n-     * This is used to store log data in key val format.\n-     */\n-    private Map<String, Object> data;\n-\n-    /**\n-     * Default constructor.\n-     */\n-    private AccessLogData() {\n-        RpcContext context = RpcContext.getContext();\n-        data = new HashMap<>();\n-        setLocalHost(context.getLocalHost());\n-        setLocalPort(context.getLocalPort());\n-        setRemoteHost(context.getRemoteHost());\n-        setRemotePort(context.getRemotePort());\n-    }\n-\n-    /**\n-     * Get new instance of log data.\n-     *\n-     * @return instance of AccessLogData\n-     */\n-    public static AccessLogData newLogData() {\n-        return new AccessLogData();\n-    }\n-\n-\n-    /**\n-     * Add version information.\n-     *\n-     * @param version\n-     */\n-    public void setVersion(String version) {\n-        set(VERSION, version);\n-    }\n-\n-    /**\n-     * Add service name.\n-     *\n-     * @param serviceName\n-     */\n-    public void setServiceName(String serviceName) {\n-        set(SERVICE, serviceName);\n-    }\n-\n-    /**\n-     * Add group name\n-     *\n-     * @param group\n-     */\n-    public void setGroup(String group) {\n-        set(GROUP, group);\n-    }\n-\n-    /**\n-     * Set the invocation date. As an argument it accept date string.\n-     *\n-     * @param invocationTime\n-     */\n-    public void setInvocationTime(Date invocationTime) {\n-        set(INVOCATION_TIME, invocationTime);\n-    }\n-\n-    /**\n-     * Set caller remote host\n-     *\n-     * @param remoteHost\n-     */\n-    private void setRemoteHost(String remoteHost) {\n-        set(REMOTE_HOST, remoteHost);\n-    }\n-\n-    /**\n-     * Set caller remote port.\n-     *\n-     * @param remotePort\n-     */\n-    private void setRemotePort(Integer remotePort) {\n-        set(REMOTE_PORT, remotePort);\n-    }\n-\n-    /**\n-     * Set local host\n-     *\n-     * @param localHost\n-     */\n-    private void setLocalHost(String localHost) {\n-        set(LOCAL_HOST, localHost);\n-    }\n-\n-    /**\n-     * Set local port of exported service\n-     *\n-     * @param localPort\n-     */\n-    private void setLocalPort(Integer localPort) {\n-        set(LOCAL_PORT, localPort);\n-    }\n-\n-    /**\n-     * Set target method name.\n-     *\n-     * @param methodName\n-     */\n-    public void setMethodName(String methodName) {\n-        set(METHOD_NAME, methodName);\n-    }\n-\n-    /**\n-     * Set invocation's method's input parameter's types\n-     *\n-     * @param types\n-     */\n-    public void setTypes(Class[] types) {\n-        set(TYPES, types != null ? Arrays.copyOf(types, types.length) : null);\n-    }\n-\n-    /**\n-     * Sets invocation arguments\n-     *\n-     * @param arguments\n-     */\n-    public void setArguments(Object[] arguments) {\n-        set(ARGUMENTS, arguments != null ? Arrays.copyOf(arguments, arguments.length) : null);\n-    }\n-\n-    /**\n-     * Return gthe service of access log entry\n-     *\n-     * @return\n-     */\n-    public String getServiceName() {\n-        return get(SERVICE).toString();\n-    }\n-\n-\n-    public String getLogMessage() {\n-        StringBuilder sn = new StringBuilder();\n-\n-        sn.append(\"[\")\n-                .append(MESSAGE_DATE_FORMATTER.format(getInvocationTime()))\n-                .append(\"] \")\n-                .append(get(REMOTE_HOST))\n-                .append(\":\")\n-                .append(get(REMOTE_PORT))\n-                .append(\" -> \")\n-                .append(get(LOCAL_HOST))\n-                .append(\":\")\n-                .append(get(LOCAL_PORT))\n-                .append(\" - \");\n-\n-        String group = get(GROUP) != null ? get(GROUP).toString() : \"\";\n-        if (StringUtils.isNotEmpty(group)) {\n-            sn.append(group).append(\"/\");\n-        }\n-\n-        sn.append(get(SERVICE));\n-\n-        String version = get(VERSION) != null ? get(VERSION).toString() : \"\";\n-        if (StringUtils.isNotEmpty(version)) {\n-            sn.append(\":\").append(version);\n-        }\n-\n-        sn.append(\" \");\n-        sn.append(get(METHOD_NAME));\n-\n-        sn.append(\"(\");\n-        Class<?>[] types = get(TYPES) != null ? (Class<?>[]) get(TYPES) : new Class[0];\n-        boolean first = true;\n-        for (Class<?> type : types) {\n-            if (first) {\n-                first = false;\n-            } else {\n-                sn.append(\",\");\n-            }\n-            sn.append(type.getName());\n-        }\n-        sn.append(\") \");\n-\n-\n-        Object[] args = get(ARGUMENTS) != null ? (Object[]) get(ARGUMENTS) : null;\n-        if (args != null && args.length > 0) {\n-            sn.append(JSON.toJSONString(args));\n-        }\n-\n-        return sn.toString();\n-    }\n-\n-    private Date getInvocationTime() {\n-        return (Date)get(INVOCATION_TIME);\n-    }\n-    /**\n-     * Return value of key\n-     *\n-     * @param key\n-     * @return\n-     */\n-    private Object get(String key) {\n-        return data.get(key);\n-    }\n-\n-    /**\n-     * Add log key along with his value.\n-     *\n-     * @param key   Any not null or non empty string\n-     * @param value Any object including null.\n-     */\n-    private void set(String key, Object value) {\n-        data.put(key, value);\n-    }\n-    \n-    public void buildAccessLogData(Invoker<?> invoker, Invocation inv) {\n-        setServiceName(invoker.getInterface().getName());\n-        setMethodName(inv.getMethodName());\n-        setVersion(invoker.getUrl().getParameter(VERSION_KEY));\n-        setGroup(invoker.getUrl().getParameter(GROUP_KEY));\n-        setInvocationTime(new Date());\n-        setTypes(inv.getParameterTypes());\n-        setArguments(inv.getArguments());\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.support;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+\r\n+import com.alibaba.fastjson.JSON;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+import java.text.DateFormat;\r\n+import java.text.SimpleDateFormat;\r\n+import java.util.Arrays;\r\n+import java.util.Date;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * AccessLogData is a container for log event data. In internally uses map and store each filed of log as value. It\r\n+ * does not generate any dynamic value e.g. time stamp, local jmv machine host address etc. It does not allow any null\r\n+ * or empty key.\r\n+ *\r\n+ * Note: since its date formatter is a singleton, make sure to run it in single thread only.\r\n+ */\r\n+public final class AccessLogData {\r\n+\r\n+    private static final String MESSAGE_DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\r\n+    private static final DateFormat MESSAGE_DATE_FORMATTER = new SimpleDateFormat(MESSAGE_DATE_FORMAT);\r\n+\r\n+    private static final String VERSION = \"version\";\r\n+    private static final String GROUP = \"group\";\r\n+    private static final String SERVICE = \"service\";\r\n+    private static final String METHOD_NAME = \"method-name\";\r\n+    private static final String INVOCATION_TIME = \"invocation-time\";\r\n+    private static final String TYPES = \"types\";\r\n+    private static final String ARGUMENTS = \"arguments\";\r\n+    private static final String REMOTE_HOST = \"remote-host\";\r\n+    private static final String REMOTE_PORT = \"remote-port\";\r\n+    private static final String LOCAL_HOST = \"localhost\";\r\n+    private static final String LOCAL_PORT = \"local-port\";\r\n+\r\n+    /**\r\n+     * This is used to store log data in key val format.\r\n+     */\r\n+    private Map<String, Object> data;\r\n+\r\n+    /**\r\n+     * Default constructor.\r\n+     */\r\n+    private AccessLogData() {\r\n+        RpcContext context = RpcContext.getContext();\r\n+        data = new HashMap<>();\r\n+        setLocalHost(context.getLocalHost());\r\n+        setLocalPort(context.getLocalPort());\r\n+        setRemoteHost(context.getRemoteHost());\r\n+        setRemotePort(context.getRemotePort());\r\n+    }\r\n+\r\n+    /**\r\n+     * Get new instance of log data.\r\n+     *\r\n+     * @return instance of AccessLogData\r\n+     */\r\n+    public static AccessLogData newLogData() {\r\n+        return new AccessLogData();\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Add version information.\r\n+     *\r\n+     * @param version\r\n+     */\r\n+    public void setVersion(String version) {\r\n+        set(VERSION, version);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add service name.\r\n+     *\r\n+     * @param serviceName\r\n+     */\r\n+    public void setServiceName(String serviceName) {\r\n+        set(SERVICE, serviceName);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add group name\r\n+     *\r\n+     * @param group\r\n+     */\r\n+    public void setGroup(String group) {\r\n+        set(GROUP, group);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set the invocation date. As an argument it accept date string.\r\n+     *\r\n+     * @param invocationTime\r\n+     */\r\n+    public void setInvocationTime(Date invocationTime) {\r\n+        set(INVOCATION_TIME, invocationTime);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set caller remote host\r\n+     *\r\n+     * @param remoteHost\r\n+     */\r\n+    private void setRemoteHost(String remoteHost) {\r\n+        set(REMOTE_HOST, remoteHost);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set caller remote port.\r\n+     *\r\n+     * @param remotePort\r\n+     */\r\n+    private void setRemotePort(Integer remotePort) {\r\n+        set(REMOTE_PORT, remotePort);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set local host\r\n+     *\r\n+     * @param localHost\r\n+     */\r\n+    private void setLocalHost(String localHost) {\r\n+        set(LOCAL_HOST, localHost);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set local port of exported service\r\n+     *\r\n+     * @param localPort\r\n+     */\r\n+    private void setLocalPort(Integer localPort) {\r\n+        set(LOCAL_PORT, localPort);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set target method name.\r\n+     *\r\n+     * @param methodName\r\n+     */\r\n+    public void setMethodName(String methodName) {\r\n+        set(METHOD_NAME, methodName);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set invocation's method's input parameter's types\r\n+     *\r\n+     * @param types\r\n+     */\r\n+    public void setTypes(Class[] types) {\r\n+        set(TYPES, types != null ? Arrays.copyOf(types, types.length) : null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Sets invocation arguments\r\n+     *\r\n+     * @param arguments\r\n+     */\r\n+    public void setArguments(Object[] arguments) {\r\n+        set(ARGUMENTS, arguments != null ? Arrays.copyOf(arguments, arguments.length) : null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Return gthe service of access log entry\r\n+     *\r\n+     * @return\r\n+     */\r\n+    public String getServiceName() {\r\n+        return get(SERVICE).toString();\r\n+    }\r\n+\r\n+\r\n+    public String getLogMessage() {\r\n+        StringBuilder sn = new StringBuilder();\r\n+\r\n+        sn.append(\"[\")\r\n+                .append(MESSAGE_DATE_FORMATTER.format(getInvocationTime()))\r\n+                .append(\"] \")\r\n+                .append(get(REMOTE_HOST))\r\n+                .append(\":\")\r\n+                .append(get(REMOTE_PORT))\r\n+                .append(\" -> \")\r\n+                .append(get(LOCAL_HOST))\r\n+                .append(\":\")\r\n+                .append(get(LOCAL_PORT))\r\n+                .append(\" - \");\r\n+\r\n+        String group = get(GROUP) != null ? get(GROUP).toString() : \"\";\r\n+        if (StringUtils.isNotEmpty(group)) {\r\n+            sn.append(group).append(\"/\");\r\n+        }\r\n+\r\n+        sn.append(get(SERVICE));\r\n+\r\n+        String version = get(VERSION) != null ? get(VERSION).toString() : \"\";\r\n+        if (StringUtils.isNotEmpty(version)) {\r\n+            sn.append(\":\").append(version);\r\n+        }\r\n+\r\n+        sn.append(\" \");\r\n+        sn.append(get(METHOD_NAME));\r\n+\r\n+        sn.append(\"(\");\r\n+        Class<?>[] types = get(TYPES) != null ? (Class<?>[]) get(TYPES) : new Class[0];\r\n+        boolean first = true;\r\n+        for (Class<?> type : types) {\r\n+            if (first) {\r\n+                first = false;\r\n+            } else {\r\n+                sn.append(\",\");\r\n+            }\r\n+            sn.append(type.getName());\r\n+        }\r\n+        sn.append(\") \");\r\n+\r\n+\r\n+        Object[] args = get(ARGUMENTS) != null ? (Object[]) get(ARGUMENTS) : null;\r\n+        if (args != null && args.length > 0) {\r\n+            sn.append(JSON.toJSONString(args));\r\n+        }\r\n+\r\n+        return sn.toString();\r\n+    }\r\n+\r\n+    private Date getInvocationTime() {\r\n+        return (Date)get(INVOCATION_TIME);\r\n+    }\r\n+    /**\r\n+     * Return value of key\r\n+     *\r\n+     * @param key\r\n+     * @return\r\n+     */\r\n+    private Object get(String key) {\r\n+        return data.get(key);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add log key along with his value.\r\n+     *\r\n+     * @param key   Any not null or non empty string\r\n+     * @param value Any object including null.\r\n+     */\r\n+    private void set(String key, Object value) {\r\n+        data.put(key, value);\r\n+    }\r\n+    \r\n+    public void buildAccessLogData(Invoker<?> invoker, Invocation inv) {\r\n+        setServiceName(invoker.getInterface().getName());\r\n+        setMethodName(inv.getMethodName());\r\n+        setVersion(invoker.getUrl().getParameter(VERSION_KEY));\r\n+        setGroup(invoker.getUrl().getParameter(GROUP_KEY));\r\n+        setInvocationTime(new Date());\r\n+        setTypes(inv.getParameterTypes());\r\n+        setArguments(inv.getArguments());\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/support/RpcUtils.java", "source2": "org/apache/dubbo/rpc/support/RpcUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,273 +1,273 @@\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.support;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.InvokeMode;\n-import org.apache.dubbo.rpc.RpcContext;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.service.GenericService;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.atomic.AtomicLong;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_PARAMETER_DESC;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_ATTACHMENT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-import static org.apache.dubbo.rpc.Constants.$ECHO;\n-import static org.apache.dubbo.rpc.Constants.$ECHO_PARAMETER_DESC;\n-import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\n-import static org.apache.dubbo.rpc.Constants.AUTO_ATTACH_INVOCATIONID_KEY;\n-import static org.apache.dubbo.rpc.Constants.ID_KEY;\n-import static org.apache.dubbo.rpc.Constants.RETURN_KEY;\n-\n-/**\n- * RpcUtils\n- */\n-public class RpcUtils {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(RpcUtils.class);\n-    private static final AtomicLong INVOKE_ID = new AtomicLong(0);\n-\n-    public static Class<?> getReturnType(Invocation invocation) {\n-        try {\n-            if (invocation != null && invocation.getInvoker() != null\n-                    && invocation.getInvoker().getUrl() != null\n-                    && invocation.getInvoker().getInterface() != GenericService.class\n-                    && !invocation.getMethodName().startsWith(\"$\")) {\n-                String service = invocation.getInvoker().getUrl().getServiceInterface();\n-                if (StringUtils.isNotEmpty(service)) {\n-                    Method method = getMethodByService(invocation, service);\n-                    return method.getReturnType();\n-                }\n-            }\n-        } catch (Throwable t) {\n-            logger.warn(t.getMessage(), t);\n-        }\n-        return null;\n-    }\n-\n-    public static Type[] getReturnTypes(Invocation invocation) {\n-        try {\n-            if (invocation != null && invocation.getInvoker() != null\n-                    && invocation.getInvoker().getUrl() != null\n-                    && invocation.getInvoker().getInterface() != GenericService.class\n-                    && !invocation.getMethodName().startsWith(\"$\")) {\n-                String service = invocation.getInvoker().getUrl().getServiceInterface();\n-                if (StringUtils.isNotEmpty(service)) {\n-                    Method method = getMethodByService(invocation, service);\n-                    return ReflectUtils.getReturnTypes(method);\n-                }\n-            }\n-        } catch (Throwable t) {\n-            logger.warn(t.getMessage(), t);\n-        }\n-        return null;\n-    }\n-\n-    public static Long getInvocationId(Invocation inv) {\n-        String id = inv.getAttachment(ID_KEY);\n-        return id == null ? null : new Long(id);\n-    }\n-\n-    /**\n-     * Idempotent operation: invocation id will be added in async operation by default\n-     *\n-     * @param url\n-     * @param inv\n-     */\n-    public static void attachInvocationIdIfAsync(URL url, Invocation inv) {\n-        if (isAttachInvocationId(url, inv) && getInvocationId(inv) == null && inv instanceof RpcInvocation) {\n-            inv.setAttachment(ID_KEY, String.valueOf(INVOKE_ID.getAndIncrement()));\n-        }\n-    }\n-\n-    private static boolean isAttachInvocationId(URL url, Invocation invocation) {\n-        String value = url.getMethodParameter(invocation.getMethodName(), AUTO_ATTACH_INVOCATIONID_KEY);\n-        if (value == null) {\n-            // add invocationid in async operation by default\n-            return isAsync(url, invocation);\n-        } else if (Boolean.TRUE.toString().equalsIgnoreCase(value)) {\n-            return true;\n-        } else {\n-            return false;\n-        }\n-    }\n-\n-    public static String getMethodName(Invocation invocation) {\n-        if ($INVOKE.equals(invocation.getMethodName())\n-                && invocation.getArguments() != null\n-                && invocation.getArguments().length > 0\n-                && invocation.getArguments()[0] instanceof String) {\n-            return (String) invocation.getArguments()[0];\n-        }\n-        return invocation.getMethodName();\n-    }\n-\n-    public static Object[] getArguments(Invocation invocation) {\n-        if ($INVOKE.equals(invocation.getMethodName())\n-                && invocation.getArguments() != null\n-                && invocation.getArguments().length > 2\n-                && invocation.getArguments()[2] instanceof Object[]) {\n-            return (Object[]) invocation.getArguments()[2];\n-        }\n-        return invocation.getArguments();\n-    }\n-\n-    public static Class<?>[] getParameterTypes(Invocation invocation) {\n-        if ($INVOKE.equals(invocation.getMethodName())\n-                && invocation.getArguments() != null\n-                && invocation.getArguments().length > 1\n-                && invocation.getArguments()[1] instanceof String[]) {\n-            String[] types = (String[]) invocation.getArguments()[1];\n-            if (types == null) {\n-                return new Class<?>[0];\n-            }\n-            Class<?>[] parameterTypes = new Class<?>[types.length];\n-            for (int i = 0; i < types.length; i++) {\n-                parameterTypes[i] = ReflectUtils.forName(types[0]);\n-            }\n-            return parameterTypes;\n-        }\n-        return invocation.getParameterTypes();\n-    }\n-\n-    public static boolean isAsync(URL url, Invocation inv) {\n-        boolean isAsync;\n-\n-        if (inv instanceof RpcInvocation) {\n-            RpcInvocation rpcInvocation = (RpcInvocation) inv;\n-            if (rpcInvocation.getInvokeMode() != null) {\n-                return rpcInvocation.getInvokeMode() == InvokeMode.ASYNC;\n-            }\n-        }\n-\n-        if (Boolean.TRUE.toString().equals(inv.getAttachment(ASYNC_KEY))) {\n-            isAsync = true;\n-        } else {\n-            isAsync = url.getMethodParameter(getMethodName(inv), ASYNC_KEY, false);\n-        }\n-        return isAsync;\n-    }\n-\n-    public static boolean isReturnTypeFuture(Invocation inv) {\n-        Class<?> clazz;\n-        if (inv instanceof RpcInvocation) {\n-            clazz = ((RpcInvocation) inv).getReturnType();\n-        } else {\n-            clazz = getReturnType(inv);\n-        }\n-        return (clazz != null && CompletableFuture.class.isAssignableFrom(clazz)) || isGenericAsync(inv);\n-    }\n-\n-    public static boolean isGenericAsync(Invocation inv) {\n-        return $INVOKE_ASYNC.equals(inv.getMethodName());\n-    }\n-\n-    // check parameterTypesDesc to fix CVE-2020-1948\n-    public static boolean isGenericCall(String parameterTypesDesc, String method) {\n-        return ($INVOKE.equals(method) || $INVOKE_ASYNC.equals(method)) && GENERIC_PARAMETER_DESC.equals(parameterTypesDesc);\n-    }\n-\n-    // check parameterTypesDesc to fix CVE-2020-1948\n-    public static boolean isEcho(String parameterTypesDesc, String method) {\n-        return $ECHO.equals(method) && $ECHO_PARAMETER_DESC.equals(parameterTypesDesc);\n-    }\n-\n-    public static InvokeMode getInvokeMode(URL url, Invocation inv) {\n-        if (inv instanceof RpcInvocation) {\n-            RpcInvocation rpcInvocation = (RpcInvocation) inv;\n-            if (rpcInvocation.getInvokeMode() != null) {\n-                return rpcInvocation.getInvokeMode();\n-            }\n-        }\n-\n-        if (isReturnTypeFuture(inv)) {\n-            return InvokeMode.FUTURE;\n-        } else if (isAsync(url, inv)) {\n-            return InvokeMode.ASYNC;\n-        } else {\n-            return InvokeMode.SYNC;\n-        }\n-    }\n-\n-    public static boolean isOneway(URL url, Invocation inv) {\n-        boolean isOneway;\n-        if (Boolean.FALSE.toString().equals(inv.getAttachment(RETURN_KEY))) {\n-            isOneway = true;\n-        } else {\n-            isOneway = !url.getMethodParameter(getMethodName(inv), RETURN_KEY, true);\n-        }\n-        return isOneway;\n-    }\n-\n-    private static Method getMethodByService(Invocation invocation, String service) throws NoSuchMethodException {\n-        Class<?> invokerInterface = invocation.getInvoker().getInterface();\n-        Class<?> cls = invokerInterface != null ? ReflectUtils.forName(invokerInterface.getClassLoader(), service)\n-                : ReflectUtils.forName(service);\n-        Method method = cls.getMethod(invocation.getMethodName(), invocation.getParameterTypes());\n-        if (method.getReturnType() == void.class) {\n-            return null;\n-        }\n-        return method;\n-    }\n-\n-    public static long getTimeout(Invocation invocation, long defaultTimeout) {\n-        long timeout = defaultTimeout;\n-        Object genericTimeout = invocation.getObjectAttachment(TIMEOUT_ATTACHMENT_KEY);\n-        if (genericTimeout != null) {\n-            timeout = convertToNumber(genericTimeout, defaultTimeout);\n-        }\n-        return timeout;\n-    }\n-\n-    public static long getTimeout(URL url, String methodName, RpcContext context, long defaultTimeout) {\n-        long timeout = defaultTimeout;\n-        Object genericTimeout = context.getObjectAttachment(TIMEOUT_KEY);\n-        if (genericTimeout != null) {\n-            timeout = convertToNumber(genericTimeout, defaultTimeout);\n-        } else if (url != null) {\n-            timeout = url.getMethodPositiveParameter(methodName, TIMEOUT_KEY, defaultTimeout);\n-        }\n-        return timeout;\n-    }\n-\n-    private static long convertToNumber(Object obj, long defaultTimeout) {\n-        long timeout = 0;\n-        try {\n-            if (obj instanceof String) {\n-                timeout = Long.parseLong((String) obj);\n-            } else if (obj instanceof Number) {\n-                timeout = ((Number) obj).longValue();\n-            } else {\n-                timeout = Long.parseLong(obj.toString());\n-            }\n-        } catch (Exception e) {\n-            // ignore\n-        }\n-        return timeout;\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.support;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.InvokeMode;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.service.GenericService;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.atomic.AtomicLong;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_PARAMETER_DESC;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_ATTACHMENT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.$ECHO;\r\n+import static org.apache.dubbo.rpc.Constants.$ECHO_PARAMETER_DESC;\r\n+import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.AUTO_ATTACH_INVOCATIONID_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.ID_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.RETURN_KEY;\r\n+\r\n+/**\r\n+ * RpcUtils\r\n+ */\r\n+public class RpcUtils {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(RpcUtils.class);\r\n+    private static final AtomicLong INVOKE_ID = new AtomicLong(0);\r\n+\r\n+    public static Class<?> getReturnType(Invocation invocation) {\r\n+        try {\r\n+            if (invocation != null && invocation.getInvoker() != null\r\n+                    && invocation.getInvoker().getUrl() != null\r\n+                    && invocation.getInvoker().getInterface() != GenericService.class\r\n+                    && !invocation.getMethodName().startsWith(\"$\")) {\r\n+                String service = invocation.getInvoker().getUrl().getServiceInterface();\r\n+                if (StringUtils.isNotEmpty(service)) {\r\n+                    Method method = getMethodByService(invocation, service);\r\n+                    return method.getReturnType();\r\n+                }\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.warn(t.getMessage(), t);\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    public static Type[] getReturnTypes(Invocation invocation) {\r\n+        try {\r\n+            if (invocation != null && invocation.getInvoker() != null\r\n+                    && invocation.getInvoker().getUrl() != null\r\n+                    && invocation.getInvoker().getInterface() != GenericService.class\r\n+                    && !invocation.getMethodName().startsWith(\"$\")) {\r\n+                String service = invocation.getInvoker().getUrl().getServiceInterface();\r\n+                if (StringUtils.isNotEmpty(service)) {\r\n+                    Method method = getMethodByService(invocation, service);\r\n+                    return ReflectUtils.getReturnTypes(method);\r\n+                }\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.warn(t.getMessage(), t);\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    public static Long getInvocationId(Invocation inv) {\r\n+        String id = inv.getAttachment(ID_KEY);\r\n+        return id == null ? null : new Long(id);\r\n+    }\r\n+\r\n+    /**\r\n+     * Idempotent operation: invocation id will be added in async operation by default\r\n+     *\r\n+     * @param url\r\n+     * @param inv\r\n+     */\r\n+    public static void attachInvocationIdIfAsync(URL url, Invocation inv) {\r\n+        if (isAttachInvocationId(url, inv) && getInvocationId(inv) == null && inv instanceof RpcInvocation) {\r\n+            inv.setAttachment(ID_KEY, String.valueOf(INVOKE_ID.getAndIncrement()));\r\n+        }\r\n+    }\r\n+\r\n+    private static boolean isAttachInvocationId(URL url, Invocation invocation) {\r\n+        String value = url.getMethodParameter(invocation.getMethodName(), AUTO_ATTACH_INVOCATIONID_KEY);\r\n+        if (value == null) {\r\n+            // add invocationid in async operation by default\r\n+            return isAsync(url, invocation);\r\n+        } else if (Boolean.TRUE.toString().equalsIgnoreCase(value)) {\r\n+            return true;\r\n+        } else {\r\n+            return false;\r\n+        }\r\n+    }\r\n+\r\n+    public static String getMethodName(Invocation invocation) {\r\n+        if ($INVOKE.equals(invocation.getMethodName())\r\n+                && invocation.getArguments() != null\r\n+                && invocation.getArguments().length > 0\r\n+                && invocation.getArguments()[0] instanceof String) {\r\n+            return (String) invocation.getArguments()[0];\r\n+        }\r\n+        return invocation.getMethodName();\r\n+    }\r\n+\r\n+    public static Object[] getArguments(Invocation invocation) {\r\n+        if ($INVOKE.equals(invocation.getMethodName())\r\n+                && invocation.getArguments() != null\r\n+                && invocation.getArguments().length > 2\r\n+                && invocation.getArguments()[2] instanceof Object[]) {\r\n+            return (Object[]) invocation.getArguments()[2];\r\n+        }\r\n+        return invocation.getArguments();\r\n+    }\r\n+\r\n+    public static Class<?>[] getParameterTypes(Invocation invocation) {\r\n+        if ($INVOKE.equals(invocation.getMethodName())\r\n+                && invocation.getArguments() != null\r\n+                && invocation.getArguments().length > 1\r\n+                && invocation.getArguments()[1] instanceof String[]) {\r\n+            String[] types = (String[]) invocation.getArguments()[1];\r\n+            if (types == null) {\r\n+                return new Class<?>[0];\r\n+            }\r\n+            Class<?>[] parameterTypes = new Class<?>[types.length];\r\n+            for (int i = 0; i < types.length; i++) {\r\n+                parameterTypes[i] = ReflectUtils.forName(types[0]);\r\n+            }\r\n+            return parameterTypes;\r\n+        }\r\n+        return invocation.getParameterTypes();\r\n+    }\r\n+\r\n+    public static boolean isAsync(URL url, Invocation inv) {\r\n+        boolean isAsync;\r\n+\r\n+        if (inv instanceof RpcInvocation) {\r\n+            RpcInvocation rpcInvocation = (RpcInvocation) inv;\r\n+            if (rpcInvocation.getInvokeMode() != null) {\r\n+                return rpcInvocation.getInvokeMode() == InvokeMode.ASYNC;\r\n+            }\r\n+        }\r\n+\r\n+        if (Boolean.TRUE.toString().equals(inv.getAttachment(ASYNC_KEY))) {\r\n+            isAsync = true;\r\n+        } else {\r\n+            isAsync = url.getMethodParameter(getMethodName(inv), ASYNC_KEY, false);\r\n+        }\r\n+        return isAsync;\r\n+    }\r\n+\r\n+    public static boolean isReturnTypeFuture(Invocation inv) {\r\n+        Class<?> clazz;\r\n+        if (inv instanceof RpcInvocation) {\r\n+            clazz = ((RpcInvocation) inv).getReturnType();\r\n+        } else {\r\n+            clazz = getReturnType(inv);\r\n+        }\r\n+        return (clazz != null && CompletableFuture.class.isAssignableFrom(clazz)) || isGenericAsync(inv);\r\n+    }\r\n+\r\n+    public static boolean isGenericAsync(Invocation inv) {\r\n+        return $INVOKE_ASYNC.equals(inv.getMethodName());\r\n+    }\r\n+\r\n+    // check parameterTypesDesc to fix CVE-2020-1948\r\n+    public static boolean isGenericCall(String parameterTypesDesc, String method) {\r\n+        return ($INVOKE.equals(method) || $INVOKE_ASYNC.equals(method)) && GENERIC_PARAMETER_DESC.equals(parameterTypesDesc);\r\n+    }\r\n+\r\n+    // check parameterTypesDesc to fix CVE-2020-1948\r\n+    public static boolean isEcho(String parameterTypesDesc, String method) {\r\n+        return $ECHO.equals(method) && $ECHO_PARAMETER_DESC.equals(parameterTypesDesc);\r\n+    }\r\n+\r\n+    public static InvokeMode getInvokeMode(URL url, Invocation inv) {\r\n+        if (inv instanceof RpcInvocation) {\r\n+            RpcInvocation rpcInvocation = (RpcInvocation) inv;\r\n+            if (rpcInvocation.getInvokeMode() != null) {\r\n+                return rpcInvocation.getInvokeMode();\r\n+            }\r\n+        }\r\n+\r\n+        if (isReturnTypeFuture(inv)) {\r\n+            return InvokeMode.FUTURE;\r\n+        } else if (isAsync(url, inv)) {\r\n+            return InvokeMode.ASYNC;\r\n+        } else {\r\n+            return InvokeMode.SYNC;\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean isOneway(URL url, Invocation inv) {\r\n+        boolean isOneway;\r\n+        if (Boolean.FALSE.toString().equals(inv.getAttachment(RETURN_KEY))) {\r\n+            isOneway = true;\r\n+        } else {\r\n+            isOneway = !url.getMethodParameter(getMethodName(inv), RETURN_KEY, true);\r\n+        }\r\n+        return isOneway;\r\n+    }\r\n+\r\n+    private static Method getMethodByService(Invocation invocation, String service) throws NoSuchMethodException {\r\n+        Class<?> invokerInterface = invocation.getInvoker().getInterface();\r\n+        Class<?> cls = invokerInterface != null ? ReflectUtils.forName(invokerInterface.getClassLoader(), service)\r\n+                : ReflectUtils.forName(service);\r\n+        Method method = cls.getMethod(invocation.getMethodName(), invocation.getParameterTypes());\r\n+        if (method.getReturnType() == void.class) {\r\n+            return null;\r\n+        }\r\n+        return method;\r\n+    }\r\n+\r\n+    public static long getTimeout(Invocation invocation, long defaultTimeout) {\r\n+        long timeout = defaultTimeout;\r\n+        Object genericTimeout = invocation.getObjectAttachment(TIMEOUT_ATTACHMENT_KEY);\r\n+        if (genericTimeout != null) {\r\n+            timeout = convertToNumber(genericTimeout, defaultTimeout);\r\n+        }\r\n+        return timeout;\r\n+    }\r\n+\r\n+    public static long getTimeout(URL url, String methodName, RpcContext context, long defaultTimeout) {\r\n+        long timeout = defaultTimeout;\r\n+        Object genericTimeout = context.getObjectAttachment(TIMEOUT_KEY);\r\n+        if (genericTimeout != null) {\r\n+            timeout = convertToNumber(genericTimeout, defaultTimeout);\r\n+        } else if (url != null) {\r\n+            timeout = url.getMethodPositiveParameter(methodName, TIMEOUT_KEY, defaultTimeout);\r\n+        }\r\n+        return timeout;\r\n+    }\r\n+\r\n+    private static long convertToNumber(Object obj, long defaultTimeout) {\r\n+        long timeout = 0;\r\n+        try {\r\n+            if (obj instanceof String) {\r\n+                timeout = Long.parseLong((String) obj);\r\n+            } else if (obj instanceof Number) {\r\n+                timeout = ((Number) obj).longValue();\r\n+            } else {\r\n+                timeout = Long.parseLong(obj.toString());\r\n+            }\r\n+        } catch (Exception e) {\r\n+            // ignore\r\n+        }\r\n+        return timeout;\r\n+    }\r\n+}\r\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-rpc-api/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-rpc-api/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,155 +1,152 @@\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: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n-00000520: 0d0a 2020 3c76 6572 7369 6f6e 3e32 2e37  ..  <version>2.7\n-00000530: 2e31 303c 2f76 6572 7369 6f6e 3e0d 0a20  .10</version>.. \n-00000540: 203c 6e61 6d65 3e24 7b70 726f 6a65 6374   <name>${project\n-00000550: 2e61 7274 6966 6163 7449 647d 3c2f 6e61  .artifactId}</na\n-00000560: 6d65 3e0d 0a20 203c 6465 7363 7269 7074  me>..  <descript\n-00000570: 696f 6e3e 5468 6520 7270 6320 6d6f 6475  ion>The rpc modu\n-00000580: 6c65 206f 6620 6475 6262 6f20 7072 6f6a  le of dubbo proj\n-00000590: 6563 743c 2f64 6573 6372 6970 7469 6f6e  ect</description\n-000005a0: 3e0d 0a20 203c 6c69 6365 6e73 6573 3e0d  >..  <licenses>.\n-000005b0: 0a20 2020 203c 6c69 6365 6e73 653e 0d0a  .    <license>..\n-000005c0: 2020 2020 2020 3c6e 616d 653e 4170 6163        <name>Apac\n-000005d0: 6865 204c 6963 656e 7365 2c20 5665 7273  he License, Vers\n-000005e0: 696f 6e20 322e 303c 2f6e 616d 653e 0d0a  ion 2.0</name>..\n-000005f0: 2020 2020 2020 3c75 726c 3e68 7474 703a        <url>http:\n-00000600: 2f2f 7777 772e 6170 6163 6865 2e6f 7267  //www.apache.org\n-00000610: 2f6c 6963 656e 7365 732f 4c49 4345 4e53  /licenses/LICENS\n-00000620: 452d 322e 303c 2f75 726c 3e0d 0a20 2020  E-2.0</url>..   \n-00000630: 2020 203c 6469 7374 7269 6275 7469 6f6e     <distribution\n-00000640: 3e72 6570 6f3c 2f64 6973 7472 6962 7574  >repo</distribut\n-00000650: 696f 6e3e 0d0a 2020 2020 3c2f 6c69 6365  ion>..    </lice\n-00000660: 6e73 653e 0d0a 2020 3c2f 6c69 6365 6e73  nse>..  </licens\n-00000670: 6573 3e0d 0a20 203c 7072 6f70 6572 7469  es>..  <properti\n-00000680: 6573 3e0d 0a20 2020 203c 736b 6970 5f6d  es>..    <skip_m\n-00000690: 6176 656e 5f64 6570 6c6f 793e 6661 6c73  aven_deploy>fals\n-000006a0: 653c 2f73 6b69 705f 6d61 7665 6e5f 6465  e</skip_maven_de\n-000006b0: 706c 6f79 3e0d 0a20 203c 2f70 726f 7065  ploy>..  </prope\n-000006c0: 7274 6965 733e 0d0a 2020 3c64 6570 656e  rties>..  <depen\n-000006d0: 6465 6e63 6965 733e 0d0a 2020 2020 3c64  dencies>..    <d\n-000006e0: 6570 656e 6465 6e63 793e 0d0a 2020 2020  ependency>..    \n-000006f0: 2020 3c67 726f 7570 4964 3e6f 7267 2e61    <groupId>org.a\n-00000700: 7061 6368 652e 6475 6262 6f3c 2f67 726f  pache.dubbo</gro\n-00000710: 7570 4964 3e0d 0a20 2020 2020 203c 6172  upId>..      <ar\n-00000720: 7469 6661 6374 4964 3e64 7562 626f 2d63  tifactId>dubbo-c\n-00000730: 6f6d 6d6f 6e3c 2f61 7274 6966 6163 7449  ommon</artifactI\n-00000740: 643e 0d0a 2020 2020 2020 3c76 6572 7369  d>..      <versi\n-00000750: 6f6e 3e24 7b70 726f 6a65 6374 2e70 6172  on>${project.par\n-00000760: 656e 742e 7665 7273 696f 6e7d 3c2f 7665  ent.version}</ve\n-00000770: 7273 696f 6e3e 0d0a 2020 2020 3c2f 6465  rsion>..    </de\n-00000780: 7065 6e64 656e 6379 3e0d 0a20 2020 203c  pendency>..    <\n-00000790: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-000007a0: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n-000007b0: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n-000007c0: 6f75 7049 643e 0d0a 2020 2020 2020 3c61  oupId>..      <a\n-000007d0: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n-000007e0: 7365 7269 616c 697a 6174 696f 6e2d 6170  serialization-ap\n-000007f0: 693c 2f61 7274 6966 6163 7449 643e 0d0a  i</artifactId>..\n-00000800: 2020 2020 2020 3c76 6572 7369 6f6e 3e24        <version>$\n-00000810: 7b70 726f 6a65 6374 2e70 6172 656e 742e  {project.parent.\n-00000820: 7665 7273 696f 6e7d 3c2f 7665 7273 696f  version}</versio\n-00000830: 6e3e 0d0a 2020 2020 3c2f 6465 7065 6e64  n>..    </depend\n-00000840: 656e 6379 3e0d 0a20 2020 203c 6465 7065  ency>..    <depe\n-00000850: 6e64 656e 6379 3e0d 0a20 2020 2020 203c  ndency>..      <\n-00000860: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n-00000870: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n-00000880: 643e 0d0a 2020 2020 2020 3c61 7274 6966  d>..      <artif\n-00000890: 6163 7449 643e 6475 6262 6f2d 7265 6d6f  actId>dubbo-remo\n-000008a0: 7469 6e67 2d61 7069 3c2f 6172 7469 6661  ting-api</artifa\n-000008b0: 6374 4964 3e0d 0a20 2020 2020 203c 7665  ctId>..      <ve\n-000008c0: 7273 696f 6e3e 247b 7072 6f6a 6563 742e  rsion>${project.\n-000008d0: 7061 7265 6e74 2e76 6572 7369 6f6e 7d3c  parent.version}<\n-000008e0: 2f76 6572 7369 6f6e 3e0d 0a20 2020 203c  /version>..    <\n-000008f0: 2f64 6570 656e 6465 6e63 793e 0d0a 2020  /dependency>..  \n-00000900: 2020 3c64 6570 656e 6465 6e63 793e 0d0a    <dependency>..\n-00000910: 2020 2020 2020 3c67 726f 7570 4964 3e63        <groupId>c\n-00000920: 6f6d 2e61 6c69 6261 6261 3c2f 6772 6f75  om.alibaba</grou\n-00000930: 7049 643e 0d0a 2020 2020 2020 3c61 7274  pId>..      <art\n-00000940: 6966 6163 7449 643e 6865 7373 6961 6e2d  ifactId>hessian-\n-00000950: 6c69 7465 3c2f 6172 7469 6661 6374 4964  lite</artifactId\n-00000960: 3e0d 0a20 2020 2020 203c 7363 6f70 653e  >..      <scope>\n-00000970: 7465 7374 3c2f 7363 6f70 653e 0d0a 2020  test</scope>..  \n-00000980: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000990: 0a20 203c 2f64 6570 656e 6465 6e63 6965  .  </dependencie\n-000009a0: 733e 0d0a 3c2f 7072 6f6a 6563 743e 0d0a  s>..</project>..\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 6170 693c 2f61 7274 6966  o-rpc-api</artif\n+00000500: 6163 7449 643e 0a20 203c 7665 7273 696f  actId>.  <versio\n+00000510: 6e3e 322e 372e 3130 3c2f 7665 7273 696f  n>2.7.10</versio\n+00000520: 6e3e 0a20 203c 6e61 6d65 3e24 7b70 726f  n>.  <name>${pro\n+00000530: 6a65 6374 2e61 7274 6966 6163 7449 647d  ject.artifactId}\n+00000540: 3c2f 6e61 6d65 3e0a 2020 3c64 6573 6372  </name>.  <descr\n+00000550: 6970 7469 6f6e 3e54 6865 2072 7063 206d  iption>The rpc m\n+00000560: 6f64 756c 6520 6f66 2064 7562 626f 2070  odule of dubbo p\n+00000570: 726f 6a65 6374 3c2f 6465 7363 7269 7074  roject</descript\n+00000580: 696f 6e3e 0a20 203c 6c69 6365 6e73 6573  ion>.  <licenses\n+00000590: 3e0a 2020 2020 3c6c 6963 656e 7365 3e0a  >.    <license>.\n+000005a0: 2020 2020 2020 3c6e 616d 653e 4170 6163        <name>Apac\n+000005b0: 6865 204c 6963 656e 7365 2c20 5665 7273  he License, Vers\n+000005c0: 696f 6e20 322e 303c 2f6e 616d 653e 0a20  ion 2.0</name>. \n+000005d0: 2020 2020 203c 7572 6c3e 6874 7470 3a2f       <url>http:/\n+000005e0: 2f77 7777 2e61 7061 6368 652e 6f72 672f  /www.apache.org/\n+000005f0: 6c69 6365 6e73 6573 2f4c 4943 454e 5345  licenses/LICENSE\n+00000600: 2d32 2e30 3c2f 7572 6c3e 0a20 2020 2020  -2.0</url>.     \n+00000610: 203c 6469 7374 7269 6275 7469 6f6e 3e72   <distribution>r\n+00000620: 6570 6f3c 2f64 6973 7472 6962 7574 696f  epo</distributio\n+00000630: 6e3e 0a20 2020 203c 2f6c 6963 656e 7365  n>.    </license\n+00000640: 3e0a 2020 3c2f 6c69 6365 6e73 6573 3e0a  >.  </licenses>.\n+00000650: 2020 3c70 726f 7065 7274 6965 733e 0a20    <properties>. \n+00000660: 2020 203c 736b 6970 5f6d 6176 656e 5f64     <skip_maven_d\n+00000670: 6570 6c6f 793e 6661 6c73 653c 2f73 6b69  eploy>false</ski\n+00000680: 705f 6d61 7665 6e5f 6465 706c 6f79 3e0a  p_maven_deploy>.\n+00000690: 2020 3c2f 7072 6f70 6572 7469 6573 3e0a    </properties>.\n+000006a0: 2020 3c64 6570 656e 6465 6e63 6965 733e    <dependencies>\n+000006b0: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n+000006c0: 3e0a 2020 2020 2020 3c67 726f 7570 4964  >.      <groupId\n+000006d0: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n+000006e0: 6f3c 2f67 726f 7570 4964 3e0a 2020 2020  o</groupId>.    \n+000006f0: 2020 3c61 7274 6966 6163 7449 643e 6475    <artifactId>du\n+00000700: 6262 6f2d 636f 6d6d 6f6e 3c2f 6172 7469  bbo-common</arti\n+00000710: 6661 6374 4964 3e0a 2020 2020 2020 3c76  factId>.      <v\n+00000720: 6572 7369 6f6e 3e24 7b70 726f 6a65 6374  ersion>${project\n+00000730: 2e70 6172 656e 742e 7665 7273 696f 6e7d  .parent.version}\n+00000740: 3c2f 7665 7273 696f 6e3e 0a20 2020 203c  </version>.    <\n+00000750: 2f64 6570 656e 6465 6e63 793e 0a20 2020  /dependency>.   \n+00000760: 203c 6465 7065 6e64 656e 6379 3e0a 2020   <dependency>.  \n+00000770: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+00000780: 2e61 7061 6368 652e 6475 6262 6f3c 2f67  .apache.dubbo</g\n+00000790: 726f 7570 4964 3e0a 2020 2020 2020 3c61  roupId>.      <a\n+000007a0: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n+000007b0: 7365 7269 616c 697a 6174 696f 6e2d 6170  serialization-ap\n+000007c0: 693c 2f61 7274 6966 6163 7449 643e 0a20  i</artifactId>. \n+000007d0: 2020 2020 203c 7665 7273 696f 6e3e 247b       <version>${\n+000007e0: 7072 6f6a 6563 742e 7061 7265 6e74 2e76  project.parent.v\n+000007f0: 6572 7369 6f6e 7d3c 2f76 6572 7369 6f6e  ersion}</version\n+00000800: 3e0a 2020 2020 3c2f 6465 7065 6e64 656e  >.    </dependen\n+00000810: 6379 3e0a 2020 2020 3c64 6570 656e 6465  cy>.    <depende\n+00000820: 6e63 793e 0a20 2020 2020 203c 6772 6f75  ncy>.      <grou\n+00000830: 7049 643e 6f72 672e 6170 6163 6865 2e64  pId>org.apache.d\n+00000840: 7562 626f 3c2f 6772 6f75 7049 643e 0a20  ubbo</groupId>. \n+00000850: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00000860: 3e64 7562 626f 2d72 656d 6f74 696e 672d  >dubbo-remoting-\n+00000870: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n+00000880: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n+00000890: 247b 7072 6f6a 6563 742e 7061 7265 6e74  ${project.parent\n+000008a0: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n+000008b0: 6f6e 3e0a 2020 2020 3c2f 6465 7065 6e64  on>.    </depend\n+000008c0: 656e 6379 3e0a 2020 2020 3c64 6570 656e  ency>.    <depen\n+000008d0: 6465 6e63 793e 0a20 2020 2020 203c 6772  dency>.      <gr\n+000008e0: 6f75 7049 643e 636f 6d2e 616c 6962 6162  oupId>com.alibab\n+000008f0: 613c 2f67 726f 7570 4964 3e0a 2020 2020  a</groupId>.    \n+00000900: 2020 3c61 7274 6966 6163 7449 643e 6865    <artifactId>he\n+00000910: 7373 6961 6e2d 6c69 7465 3c2f 6172 7469  ssian-lite</arti\n+00000920: 6661 6374 4964 3e0a 2020 2020 2020 3c73  factId>.      <s\n+00000930: 636f 7065 3e74 6573 743c 2f73 636f 7065  cope>test</scope\n+00000940: 3e0a 2020 2020 3c2f 6465 7065 6e64 656e  >.    </dependen\n+00000950: 6379 3e0a 2020 3c2f 6465 7065 6e64 656e  cy>.  </dependen\n+00000960: 6369 6573 3e0a 3c2f 7072 6f6a 6563 743e  cies>.</project>\n+00000970: 0a                                       .\n"}]}
