{"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: 98263 bytes, number of entries: 97\n+Zip file size: 98962 bytes, number of entries: 97\n -rw-r--r--  2.0 unx       64 b- defN 20-Apr-01 08:04 META-INF/MANIFEST.MF\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/metadata/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/\n@@ -20,80 +20,80 @@\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/dubbo/internal/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-api/\n -rw-r--r--  2.0 unx     3296 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      175 b- defN 20-Apr-01 08:04 META-INF/NOTICE\n--rw-r--r--  2.0 unx     2647 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java\n--rw-r--r--  2.0 unx     4111 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java\n--rw-r--r--  2.0 unx     1266 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MappingChangedEvent.java\n--rw-r--r--  2.0 unx      920 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MappingListener.java\n--rw-r--r--  2.0 unx     1244 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataChangeListener.java\n--rw-r--r--  2.0 unx     1583 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataConstants.java\n--rw-r--r--  2.0 unx    14972 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataInfo.java\n--rw-r--r--  2.0 unx     1213 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataParamsFilter.java\n--rw-r--r--  2.0 unx    10777 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataService.java\n--rw-r--r--  2.0 unx     3084 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataServiceExporter.java\n--rw-r--r--  2.0 unx     2236 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataServiceType.java\n--rw-r--r--  2.0 unx     2049 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/RevisionResolver.java\n--rw-r--r--  2.0 unx     2905 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/ServiceNameMapping.java\n--rw-r--r--  2.0 unx     2647 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/WritableMetadataService.java\n--rw-r--r--  2.0 unx     2624 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/MethodDefinitionBuilder.java\n--rw-r--r--  2.0 unx     3861 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java\n--rw-r--r--  2.0 unx     3314 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     1723 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java\n--rw-r--r--  2.0 unx     2765 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java\n--rw-r--r--  2.0 unx     2488 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java\n--rw-r--r--  2.0 unx     1947 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java\n--rw-r--r--  2.0 unx     3137 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java\n--rw-r--r--  2.0 unx     1443 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/TypeBuilder.java\n--rw-r--r--  2.0 unx     1383 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java\n--rw-r--r--  2.0 unx     3145 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/model/MethodDefinition.java\n--rw-r--r--  2.0 unx     3015 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/model/ServiceDefinition.java\n--rw-r--r--  2.0 unx     5307 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/model/TypeDefinition.java\n--rw-r--r--  2.0 unx     3495 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/util/ClassUtils.java\n--rw-r--r--  2.0 unx     3303 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java\n--rw-r--r--  2.0 unx     2918 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/MetadataReport.java\n--rw-r--r--  2.0 unx     1120 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/MetadataReportFactory.java\n--rw-r--r--  2.0 unx     3594 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/MetadataReportInstance.java\n--rw-r--r--  2.0 unx     2269 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/BaseApplicationMetadataIdentifier.java\n--rw-r--r--  2.0 unx      980 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/BaseMetadataIdentifier.java\n--rw-r--r--  2.0 unx     3170 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/BaseServiceMetadataIdentifier.java\n--rw-r--r--  2.0 unx     2077 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/KeyTypeEnum.java\n--rw-r--r--  2.0 unx     3194 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java\n--rw-r--r--  2.0 unx     3134 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/ServiceMetadataIdentifier.java\n--rw-r--r--  2.0 unx     2161 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/SubscriberMetadataIdentifier.java\n--rw-r--r--  2.0 unx    20351 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java\n--rw-r--r--  2.0 unx     2627 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java\n--rw-r--r--  2.0 unx     1286 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/support/Constants.java\n--rw-r--r--  2.0 unx     2415 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/AbstractAnnotatedMethodParameterProcessor.java\n--rw-r--r--  2.0 unx    15751 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     2501 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/AnnotatedMethodParameterProcessor.java\n--rw-r--r--  2.0 unx     3335 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/ClassPathServiceRestMetadataReader.java\n--rw-r--r--  2.0 unx     1987 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/DefaultServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     7024 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/RequestMetadata.java\n--rw-r--r--  2.0 unx     4619 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/RestMetadataConstants.java\n--rw-r--r--  2.0 unx     6158 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/RestMethodMetadata.java\n--rw-r--r--  2.0 unx     3195 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/ServiceRestMetadata.java\n--rw-r--r--  2.0 unx     1217 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/ServiceRestMetadataReader.java\n--rw-r--r--  2.0 unx     1596 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/ServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     2887 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/DefaultValueParameterProcessor.java\n--rw-r--r--  2.0 unx     1344 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/FormParamParameterProcessor.java\n--rw-r--r--  2.0 unx     2162 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/HeaderParamParameterProcessor.java\n--rw-r--r--  2.0 unx     4582 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/JAXRSServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     1352 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/MatrixParamParameterProcessor.java\n--rw-r--r--  2.0 unx     1758 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/ParamAnnotationParameterProcessor.java\n--rw-r--r--  2.0 unx     1348 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/QueryParamParameterProcessor.java\n--rw-r--r--  2.0 unx     2864 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java\n--rw-r--r--  2.0 unx     1797 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/springmvc/RequestHeaderParameterProcessor.java\n--rw-r--r--  2.0 unx     1792 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/springmvc/RequestParamParameterProcessor.java\n--rw-r--r--  2.0 unx     6256 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/springmvc/SpringMvcServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     4202 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/AbstractAbstractWritableMetadataService.java\n+-rw-r--r--  2.0 unx     2702 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java\n+-rw-r--r--  2.0 unx     4214 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java\n+-rw-r--r--  2.0 unx     1307 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MappingChangedEvent.java\n+-rw-r--r--  2.0 unx      941 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MappingListener.java\n+-rw-r--r--  2.0 unx     1279 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataChangeListener.java\n+-rw-r--r--  2.0 unx     1613 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataConstants.java\n+-rw-r--r--  2.0 unx    15421 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataInfo.java\n+-rw-r--r--  2.0 unx     1250 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataParamsFilter.java\n+-rw-r--r--  2.0 unx    11050 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataService.java\n+-rw-r--r--  2.0 unx     3184 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataServiceExporter.java\n+-rw-r--r--  2.0 unx     2308 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/MetadataServiceType.java\n+-rw-r--r--  2.0 unx     2108 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/RevisionResolver.java\n+-rw-r--r--  2.0 unx     2977 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/ServiceNameMapping.java\n+-rw-r--r--  2.0 unx     2734 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/WritableMetadataService.java\n+-rw-r--r--  2.0 unx     2702 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/MethodDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     3968 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     3402 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     1771 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java\n+-rw-r--r--  2.0 unx     2835 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java\n+-rw-r--r--  2.0 unx     2558 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java\n+-rw-r--r--  2.0 unx     2005 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java\n+-rw-r--r--  2.0 unx     3217 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java\n+-rw-r--r--  2.0 unx     1485 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/builder/TypeBuilder.java\n+-rw-r--r--  2.0 unx     1426 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java\n+-rw-r--r--  2.0 unx     3245 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/model/MethodDefinition.java\n+-rw-r--r--  2.0 unx     3116 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/model/ServiceDefinition.java\n+-rw-r--r--  2.0 unx     5496 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/model/TypeDefinition.java\n+-rw-r--r--  2.0 unx     3606 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/util/ClassUtils.java\n+-rw-r--r--  2.0 unx     3405 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java\n+-rw-r--r--  2.0 unx     2995 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/MetadataReport.java\n+-rw-r--r--  2.0 unx     1150 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/MetadataReportFactory.java\n+-rw-r--r--  2.0 unx     3680 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/MetadataReportInstance.java\n+-rw-r--r--  2.0 unx     2332 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/BaseApplicationMetadataIdentifier.java\n+-rw-r--r--  2.0 unx     1005 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/BaseMetadataIdentifier.java\n+-rw-r--r--  2.0 unx     3258 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/BaseServiceMetadataIdentifier.java\n+-rw-r--r--  2.0 unx     2139 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/KeyTypeEnum.java\n+-rw-r--r--  2.0 unx     3299 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java\n+-rw-r--r--  2.0 unx     3219 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/ServiceMetadataIdentifier.java\n+-rw-r--r--  2.0 unx     2231 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/identifier/SubscriberMetadataIdentifier.java\n+-rw-r--r--  2.0 unx    20819 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java\n+-rw-r--r--  2.0 unx     2689 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java\n+-rw-r--r--  2.0 unx     1322 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/report/support/Constants.java\n+-rw-r--r--  2.0 unx     2466 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/AbstractAnnotatedMethodParameterProcessor.java\n+-rw-r--r--  2.0 unx    16094 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     2567 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/AnnotatedMethodParameterProcessor.java\n+-rw-r--r--  2.0 unx     3417 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/ClassPathServiceRestMetadataReader.java\n+-rw-r--r--  2.0 unx     2046 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/DefaultServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     7250 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/RequestMetadata.java\n+-rw-r--r--  2.0 unx     4764 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/RestMetadataConstants.java\n+-rw-r--r--  2.0 unx     6357 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/RestMethodMetadata.java\n+-rw-r--r--  2.0 unx     3302 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/ServiceRestMetadata.java\n+-rw-r--r--  2.0 unx     1256 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/ServiceRestMetadataReader.java\n+-rw-r--r--  2.0 unx     1639 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/ServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     2961 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/DefaultValueParameterProcessor.java\n+-rw-r--r--  2.0 unx     1378 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/FormParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     2211 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/HeaderParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     4681 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/JAXRSServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     1386 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/MatrixParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     1796 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/ParamAnnotationParameterProcessor.java\n+-rw-r--r--  2.0 unx     1382 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/jaxrs/QueryParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     2935 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java\n+-rw-r--r--  2.0 unx     1840 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/springmvc/RequestHeaderParameterProcessor.java\n+-rw-r--r--  2.0 unx     1835 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/springmvc/RequestParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     6397 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/rest/springmvc/SpringMvcServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     4302 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/AbstractAbstractWritableMetadataService.java\n -rw-r--r--  2.0 unx       61 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataParamsFilter\n -rw-r--r--  2.0 unx       71 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping\n--rw-r--r--  2.0 unx      275 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder\n--rw-r--r--  2.0 unx      715 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor\n--rw-r--r--  2.0 unx      182 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver\n--rw-r--r--  2.0 unx     3058 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.xml\n+-rw-r--r--  2.0 unx      278 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder\n+-rw-r--r--  2.0 unx      724 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor\n+-rw-r--r--  2.0 unx      184 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver\n+-rw-r--r--  2.0 unx     2977 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.xml\n -rw-r--r--  2.0 unx       73 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.properties\n-97 files, 244955 bytes uncompressed, 80099 bytes compressed:  67.3%\n+97 files, 250986 bytes uncompressed, 80798 bytes compressed:  67.8%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -461,4371 +461,4371 @@\n 0190C Extract Zip Spec      14 (20) '2.0'\n 0190D Extract OS            00 (0) 'MS-DOS'\n 0190E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n 01910 Compression Method    0008 (8) 'Deflated'\n 01912 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-01916 CRC                   CF6AE7CA (3479889866)\n-0191A Compressed Size       00000369 (873)\n-0191E Uncompressed Size     00000A57 (2647)\n+01916 CRC                   42A6419F (1118192031)\n+0191A Compressed Size       00000374 (884)\n+0191E Uncompressed Size     00000A8E (2702)\n 01922 Filename Length       003A (58)\n 01924 Extra Length          0000 (0)\n 01926 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x1926: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 01960 PAYLOAD\n \n-01CC9 LOCAL HEADER #27      04034B50 (67324752)\n-01CCD Extract Zip Spec      14 (20) '2.0'\n-01CCE Extract OS            00 (0) 'MS-DOS'\n-01CCF General Purpose Flag  0800 (2048)\n+01CD4 LOCAL HEADER #27      04034B50 (67324752)\n+01CD8 Extract Zip Spec      14 (20) '2.0'\n+01CD9 Extract OS            00 (0) 'MS-DOS'\n+01CDA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-01CD1 Compression Method    0008 (8) 'Deflated'\n-01CD3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-01CD7 CRC                   462DB2DF (1177400031)\n-01CDB Compressed Size       00000590 (1424)\n-01CDF Uncompressed Size     0000100F (4111)\n-01CE3 Filename Length       0045 (69)\n-01CE5 Extra Length          0000 (0)\n-01CE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+01CDC Compression Method    0008 (8) 'Deflated'\n+01CDE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+01CE2 CRC                   3EF8A330 (1056482096)\n+01CE6 Compressed Size       0000059B (1435)\n+01CEA Uncompressed Size     00001076 (4214)\n+01CEE Filename Length       0045 (69)\n+01CF0 Extra Length          0000 (0)\n+01CF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01D2C PAYLOAD\n+01D37 PAYLOAD\n \n-022BC LOCAL HEADER #28      04034B50 (67324752)\n-022C0 Extract Zip Spec      14 (20) '2.0'\n-022C1 Extract OS            00 (0) 'MS-DOS'\n-022C2 General Purpose Flag  0800 (2048)\n+022D2 LOCAL HEADER #28      04034B50 (67324752)\n+022D6 Extract Zip Spec      14 (20) '2.0'\n+022D7 Extract OS            00 (0) 'MS-DOS'\n+022D8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-022C4 Compression Method    0008 (8) 'Deflated'\n-022C6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-022CA CRC                   A8E35A99 (2833472153)\n-022CE Compressed Size       00000271 (625)\n-022D2 Uncompressed Size     000004F2 (1266)\n-022D6 Filename Length       0032 (50)\n-022D8 Extra Length          0000 (0)\n-022DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+022DA Compression Method    0008 (8) 'Deflated'\n+022DC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+022E0 CRC                   EEF0F134 (4008767796)\n+022E4 Compressed Size       00000276 (630)\n+022E8 Uncompressed Size     0000051B (1307)\n+022EC Filename Length       0032 (50)\n+022EE Extra Length          0000 (0)\n+022F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x22DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x22F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0230C PAYLOAD\n+02322 PAYLOAD\n \n-0257D LOCAL HEADER #29      04034B50 (67324752)\n-02581 Extract Zip Spec      14 (20) '2.0'\n-02582 Extract OS            00 (0) 'MS-DOS'\n-02583 General Purpose Flag  0800 (2048)\n+02598 LOCAL HEADER #29      04034B50 (67324752)\n+0259C Extract Zip Spec      14 (20) '2.0'\n+0259D Extract OS            00 (0) 'MS-DOS'\n+0259E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-02585 Compression Method    0008 (8) 'Deflated'\n-02587 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0258B CRC                   ECCEFB44 (3972987716)\n-0258F Compressed Size       00000210 (528)\n-02593 Uncompressed Size     00000398 (920)\n-02597 Filename Length       002E (46)\n-02599 Extra Length          0000 (0)\n-0259B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+025A0 Compression Method    0008 (8) 'Deflated'\n+025A2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+025A6 CRC                   1D5DF166 (492695910)\n+025AA Compressed Size       00000217 (535)\n+025AE Uncompressed Size     000003AD (941)\n+025B2 Filename Length       002E (46)\n+025B4 Extra Length          0000 (0)\n+025B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x259B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x25B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-025C9 PAYLOAD\n+025E4 PAYLOAD\n \n-027D9 LOCAL HEADER #30      04034B50 (67324752)\n-027DD Extract Zip Spec      14 (20) '2.0'\n-027DE Extract OS            00 (0) 'MS-DOS'\n-027DF General Purpose Flag  0800 (2048)\n+027FB LOCAL HEADER #30      04034B50 (67324752)\n+027FF Extract Zip Spec      14 (20) '2.0'\n+02800 Extract OS            00 (0) 'MS-DOS'\n+02801 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-027E1 Compression Method    0008 (8) 'Deflated'\n-027E3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-027E7 CRC                   7822EF2B (2015555371)\n-027EB Compressed Size       00000299 (665)\n-027EF Uncompressed Size     000004DC (1244)\n-027F3 Filename Length       0035 (53)\n-027F5 Extra Length          0000 (0)\n-027F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02803 Compression Method    0008 (8) 'Deflated'\n+02805 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+02809 CRC                   FAB44FD1 (4206120913)\n+0280D Compressed Size       000002A1 (673)\n+02811 Uncompressed Size     000004FF (1279)\n+02815 Filename Length       0035 (53)\n+02817 Extra Length          0000 (0)\n+02819 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x27F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2819: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0282C PAYLOAD\n+0284E PAYLOAD\n \n-02AC5 LOCAL HEADER #31      04034B50 (67324752)\n-02AC9 Extract Zip Spec      14 (20) '2.0'\n-02ACA Extract OS            00 (0) 'MS-DOS'\n-02ACB General Purpose Flag  0800 (2048)\n+02AEF LOCAL HEADER #31      04034B50 (67324752)\n+02AF3 Extract Zip Spec      14 (20) '2.0'\n+02AF4 Extract OS            00 (0) 'MS-DOS'\n+02AF5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-02ACD Compression Method    0008 (8) 'Deflated'\n-02ACF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-02AD3 CRC                   5CAAFB07 (1554709255)\n-02AD7 Compressed Size       000002BB (699)\n-02ADB Uncompressed Size     0000062F (1583)\n-02ADF Filename Length       0030 (48)\n-02AE1 Extra Length          0000 (0)\n-02AE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02AF7 Compression Method    0008 (8) 'Deflated'\n+02AF9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+02AFD CRC                   0D3C7289 (222065289)\n+02B01 Compressed Size       000002C3 (707)\n+02B05 Uncompressed Size     0000064D (1613)\n+02B09 Filename Length       0030 (48)\n+02B0B Extra Length          0000 (0)\n+02B0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02B13 PAYLOAD\n+02B3D PAYLOAD\n \n-02DCE LOCAL HEADER #32      04034B50 (67324752)\n-02DD2 Extract Zip Spec      14 (20) '2.0'\n-02DD3 Extract OS            00 (0) 'MS-DOS'\n-02DD4 General Purpose Flag  0800 (2048)\n+02E00 LOCAL HEADER #32      04034B50 (67324752)\n+02E04 Extract Zip Spec      14 (20) '2.0'\n+02E05 Extract OS            00 (0) 'MS-DOS'\n+02E06 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-02DD6 Compression Method    0008 (8) 'Deflated'\n-02DD8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-02DDC CRC                   4F1688E0 (1326876896)\n-02DE0 Compressed Size       00000C78 (3192)\n-02DE4 Uncompressed Size     00003A7C (14972)\n-02DE8 Filename Length       002B (43)\n-02DEA Extra Length          0000 (0)\n-02DEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02E08 Compression Method    0008 (8) 'Deflated'\n+02E0A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+02E0E CRC                   9A0F8216 (2584707606)\n+02E12 Compressed Size       00000C8C (3212)\n+02E16 Uncompressed Size     00003C3D (15421)\n+02E1A Filename Length       002B (43)\n+02E1C Extra Length          0000 (0)\n+02E1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2DEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2E1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02E17 PAYLOAD\n+02E49 PAYLOAD\n \n-03A8F LOCAL HEADER #33      04034B50 (67324752)\n-03A93 Extract Zip Spec      14 (20) '2.0'\n-03A94 Extract OS            00 (0) 'MS-DOS'\n-03A95 General Purpose Flag  0800 (2048)\n+03AD5 LOCAL HEADER #33      04034B50 (67324752)\n+03AD9 Extract Zip Spec      14 (20) '2.0'\n+03ADA Extract OS            00 (0) 'MS-DOS'\n+03ADB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-03A97 Compression Method    0008 (8) 'Deflated'\n-03A99 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-03A9D CRC                   F33C5BFA (4080819194)\n-03AA1 Compressed Size       00000270 (624)\n-03AA5 Uncompressed Size     000004BD (1213)\n-03AA9 Filename Length       0033 (51)\n-03AAB Extra Length          0000 (0)\n-03AAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03ADD Compression Method    0008 (8) 'Deflated'\n+03ADF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+03AE3 CRC                   5D4E898D (1565428109)\n+03AE7 Compressed Size       0000027A (634)\n+03AEB Uncompressed Size     000004E2 (1250)\n+03AEF Filename Length       0033 (51)\n+03AF1 Extra Length          0000 (0)\n+03AF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3AAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3AF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03AE0 PAYLOAD\n+03B26 PAYLOAD\n \n-03D50 LOCAL HEADER #34      04034B50 (67324752)\n-03D54 Extract Zip Spec      14 (20) '2.0'\n-03D55 Extract OS            00 (0) 'MS-DOS'\n-03D56 General Purpose Flag  0800 (2048)\n+03DA0 LOCAL HEADER #34      04034B50 (67324752)\n+03DA4 Extract Zip Spec      14 (20) '2.0'\n+03DA5 Extract OS            00 (0) 'MS-DOS'\n+03DA6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-03D58 Compression Method    0008 (8) 'Deflated'\n-03D5A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-03D5E CRC                   B27D0F80 (2994540416)\n-03D62 Compressed Size       0000091D (2333)\n-03D66 Uncompressed Size     00002A19 (10777)\n-03D6A Filename Length       002E (46)\n-03D6C Extra Length          0000 (0)\n-03D6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03DA8 Compression Method    0008 (8) 'Deflated'\n+03DAA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+03DAE CRC                   2CED0C75 (753732725)\n+03DB2 Compressed Size       0000092D (2349)\n+03DB6 Uncompressed Size     00002B2A (11050)\n+03DBA Filename Length       002E (46)\n+03DBC Extra Length          0000 (0)\n+03DBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3D6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3DBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03D9C PAYLOAD\n+03DEC PAYLOAD\n \n-046B9 LOCAL HEADER #35      04034B50 (67324752)\n-046BD Extract Zip Spec      14 (20) '2.0'\n-046BE Extract OS            00 (0) 'MS-DOS'\n-046BF General Purpose Flag  0800 (2048)\n+04719 LOCAL HEADER #35      04034B50 (67324752)\n+0471D Extract Zip Spec      14 (20) '2.0'\n+0471E Extract OS            00 (0) 'MS-DOS'\n+0471F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-046C1 Compression Method    0008 (8) 'Deflated'\n-046C3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-046C7 CRC                   2A67D5E8 (711448040)\n-046CB Compressed Size       00000427 (1063)\n-046CF Uncompressed Size     00000C0C (3084)\n-046D3 Filename Length       0036 (54)\n-046D5 Extra Length          0000 (0)\n-046D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04721 Compression Method    0008 (8) 'Deflated'\n+04723 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04727 CRC                   C38A081C (3280603164)\n+0472B Compressed Size       00000432 (1074)\n+0472F Uncompressed Size     00000C70 (3184)\n+04733 Filename Length       0036 (54)\n+04735 Extra Length          0000 (0)\n+04737 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x46D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4737: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0470D PAYLOAD\n+0476D PAYLOAD\n \n-04B34 LOCAL HEADER #36      04034B50 (67324752)\n-04B38 Extract Zip Spec      14 (20) '2.0'\n-04B39 Extract OS            00 (0) 'MS-DOS'\n-04B3A General Purpose Flag  0800 (2048)\n+04B9F LOCAL HEADER #36      04034B50 (67324752)\n+04BA3 Extract Zip Spec      14 (20) '2.0'\n+04BA4 Extract OS            00 (0) 'MS-DOS'\n+04BA5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04B3C Compression Method    0008 (8) 'Deflated'\n-04B3E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04B42 CRC                   7483DD2E (1954798894)\n-04B46 Compressed Size       00000360 (864)\n-04B4A Uncompressed Size     000008BC (2236)\n-04B4E Filename Length       0032 (50)\n-04B50 Extra Length          0000 (0)\n-04B52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04BA7 Compression Method    0008 (8) 'Deflated'\n+04BA9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04BAD CRC                   5D7F96AB (1568642731)\n+04BB1 Compressed Size       0000036A (874)\n+04BB5 Uncompressed Size     00000904 (2308)\n+04BB9 Filename Length       0032 (50)\n+04BBB Extra Length          0000 (0)\n+04BBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4B52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4BBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04B84 PAYLOAD\n+04BEF PAYLOAD\n \n-04EE4 LOCAL HEADER #37      04034B50 (67324752)\n-04EE8 Extract Zip Spec      14 (20) '2.0'\n-04EE9 Extract OS            00 (0) 'MS-DOS'\n-04EEA General Purpose Flag  0800 (2048)\n+04F59 LOCAL HEADER #37      04034B50 (67324752)\n+04F5D Extract Zip Spec      14 (20) '2.0'\n+04F5E Extract OS            00 (0) 'MS-DOS'\n+04F5F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04EEC Compression Method    0008 (8) 'Deflated'\n-04EEE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04EF2 CRC                   6B4F2850 (1800349776)\n-04EF6 Compressed Size       000003C5 (965)\n-04EFA Uncompressed Size     00000801 (2049)\n-04EFE Filename Length       002F (47)\n-04F00 Extra Length          0000 (0)\n-04F02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04F61 Compression Method    0008 (8) 'Deflated'\n+04F63 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04F67 CRC                   509BAB75 (1352379253)\n+04F6B Compressed Size       000003CF (975)\n+04F6F Uncompressed Size     0000083C (2108)\n+04F73 Filename Length       002F (47)\n+04F75 Extra Length          0000 (0)\n+04F77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4F02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4F77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04F31 PAYLOAD\n+04FA6 PAYLOAD\n \n-052F6 LOCAL HEADER #38      04034B50 (67324752)\n-052FA Extract Zip Spec      14 (20) '2.0'\n-052FB Extract OS            00 (0) 'MS-DOS'\n-052FC General Purpose Flag  0800 (2048)\n+05375 LOCAL HEADER #38      04034B50 (67324752)\n+05379 Extract Zip Spec      14 (20) '2.0'\n+0537A Extract OS            00 (0) 'MS-DOS'\n+0537B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-052FE Compression Method    0008 (8) 'Deflated'\n-05300 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05304 CRC                   065E383D (106838077)\n-05308 Compressed Size       00000442 (1090)\n-0530C Uncompressed Size     00000B59 (2905)\n-05310 Filename Length       0031 (49)\n-05312 Extra Length          0000 (0)\n-05314 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0537D Compression Method    0008 (8) 'Deflated'\n+0537F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05383 CRC                   C02150D4 (3223408852)\n+05387 Compressed Size       0000044D (1101)\n+0538B Uncompressed Size     00000BA1 (2977)\n+0538F Filename Length       0031 (49)\n+05391 Extra Length          0000 (0)\n+05393 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5314: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5393: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05345 PAYLOAD\n+053C4 PAYLOAD\n \n-05787 LOCAL HEADER #39      04034B50 (67324752)\n-0578B Extract Zip Spec      14 (20) '2.0'\n-0578C Extract OS            00 (0) 'MS-DOS'\n-0578D General Purpose Flag  0800 (2048)\n+05811 LOCAL HEADER #39      04034B50 (67324752)\n+05815 Extract Zip Spec      14 (20) '2.0'\n+05816 Extract OS            00 (0) 'MS-DOS'\n+05817 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0578F Compression Method    0008 (8) 'Deflated'\n-05791 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05795 CRC                   33B4FA9F (867498655)\n-05799 Compressed Size       000003BC (956)\n-0579D Uncompressed Size     00000A57 (2647)\n-057A1 Filename Length       0036 (54)\n-057A3 Extra Length          0000 (0)\n-057A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05819 Compression Method    0008 (8) 'Deflated'\n+0581B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0581F CRC                   B34C7492 (3008132242)\n+05823 Compressed Size       000003C6 (966)\n+05827 Uncompressed Size     00000AAE (2734)\n+0582B Filename Length       0036 (54)\n+0582D Extra Length          0000 (0)\n+0582F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x57A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x582F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-057DB PAYLOAD\n+05865 PAYLOAD\n \n-05B97 LOCAL HEADER #40      04034B50 (67324752)\n-05B9B Extract Zip Spec      14 (20) '2.0'\n-05B9C Extract OS            00 (0) 'MS-DOS'\n-05B9D General Purpose Flag  0800 (2048)\n+05C2B LOCAL HEADER #40      04034B50 (67324752)\n+05C2F Extract Zip Spec      14 (20) '2.0'\n+05C30 Extract OS            00 (0) 'MS-DOS'\n+05C31 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05B9F Compression Method    0008 (8) 'Deflated'\n-05BA1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05BA5 CRC                   99A066B3 (2577426099)\n-05BA9 Compressed Size       000003F0 (1008)\n-05BAD Uncompressed Size     00000A40 (2624)\n-05BB1 Filename Length       0041 (65)\n-05BB3 Extra Length          0000 (0)\n-05BB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05C33 Compression Method    0008 (8) 'Deflated'\n+05C35 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05C39 CRC                   812905CA (2166949322)\n+05C3D Compressed Size       000003FC (1020)\n+05C41 Uncompressed Size     00000A8E (2702)\n+05C45 Filename Length       0041 (65)\n+05C47 Extra Length          0000 (0)\n+05C49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5BB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5C49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05BF6 PAYLOAD\n+05C8A PAYLOAD\n \n-05FE6 LOCAL HEADER #41      04034B50 (67324752)\n-05FEA Extract Zip Spec      14 (20) '2.0'\n-05FEB Extract OS            00 (0) 'MS-DOS'\n-05FEC General Purpose Flag  0800 (2048)\n+06086 LOCAL HEADER #41      04034B50 (67324752)\n+0608A Extract Zip Spec      14 (20) '2.0'\n+0608B Extract OS            00 (0) 'MS-DOS'\n+0608C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05FEE Compression Method    0008 (8) 'Deflated'\n-05FF0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05FF4 CRC                   8FC61B83 (2412125059)\n-05FF8 Compressed Size       000004C9 (1225)\n-05FFC Uncompressed Size     00000F15 (3861)\n-06000 Filename Length       0042 (66)\n-06002 Extra Length          0000 (0)\n-06004 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0608E Compression Method    0008 (8) 'Deflated'\n+06090 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+06094 CRC                   D4CAE0D6 (3570065622)\n+06098 Compressed Size       000004D7 (1239)\n+0609C Uncompressed Size     00000F80 (3968)\n+060A0 Filename Length       0042 (66)\n+060A2 Extra Length          0000 (0)\n+060A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6004: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x60A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06046 PAYLOAD\n+060E6 PAYLOAD\n \n-0650F LOCAL HEADER #42      04034B50 (67324752)\n-06513 Extract Zip Spec      14 (20) '2.0'\n-06514 Extract OS            00 (0) 'MS-DOS'\n-06515 General Purpose Flag  0800 (2048)\n+065BD LOCAL HEADER #42      04034B50 (67324752)\n+065C1 Extract Zip Spec      14 (20) '2.0'\n+065C2 Extract OS            00 (0) 'MS-DOS'\n+065C3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-06517 Compression Method    0008 (8) 'Deflated'\n-06519 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0651D CRC                   C36126A3 (3277924003)\n-06521 Compressed Size       00000499 (1177)\n-06525 Uncompressed Size     00000CF2 (3314)\n-06529 Filename Length       003F (63)\n-0652B Extra Length          0000 (0)\n-0652D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+065C5 Compression Method    0008 (8) 'Deflated'\n+065C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+065CB CRC                   9C44854A (2621736266)\n+065CF Compressed Size       000004A2 (1186)\n+065D3 Uncompressed Size     00000D4A (3402)\n+065D7 Filename Length       003F (63)\n+065D9 Extra Length          0000 (0)\n+065DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x652D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0656C PAYLOAD\n+0661A PAYLOAD\n \n-06A05 LOCAL HEADER #43      04034B50 (67324752)\n-06A09 Extract Zip Spec      14 (20) '2.0'\n-06A0A Extract OS            00 (0) 'MS-DOS'\n-06A0B General Purpose Flag  0800 (2048)\n+06ABC LOCAL HEADER #43      04034B50 (67324752)\n+06AC0 Extract Zip Spec      14 (20) '2.0'\n+06AC1 Extract OS            00 (0) 'MS-DOS'\n+06AC2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-06A0D Compression Method    0008 (8) 'Deflated'\n-06A0F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-06A13 CRC                   C15189CF (3243346383)\n-06A17 Compressed Size       00000317 (791)\n-06A1B Uncompressed Size     000006BB (1723)\n-06A1F Filename Length       0042 (66)\n-06A21 Extra Length          0000 (0)\n-06A23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+06AC4 Compression Method    0008 (8) 'Deflated'\n+06AC6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+06ACA CRC                   F46C8898 (4100753560)\n+06ACE Compressed Size       00000320 (800)\n+06AD2 Uncompressed Size     000006EB (1771)\n+06AD6 Filename Length       0042 (66)\n+06AD8 Extra Length          0000 (0)\n+06ADA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6A23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6ADA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06A65 PAYLOAD\n+06B1C PAYLOAD\n \n-06D7C LOCAL HEADER #44      04034B50 (67324752)\n-06D80 Extract Zip Spec      14 (20) '2.0'\n-06D81 Extract OS            00 (0) 'MS-DOS'\n-06D82 General Purpose Flag  0800 (2048)\n+06E3C LOCAL HEADER #44      04034B50 (67324752)\n+06E40 Extract Zip Spec      14 (20) '2.0'\n+06E41 Extract OS            00 (0) 'MS-DOS'\n+06E42 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-06D84 Compression Method    0008 (8) 'Deflated'\n-06D86 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-06D8A CRC                   48345DF3 (1211391475)\n-06D8E Compressed Size       00000433 (1075)\n-06D92 Uncompressed Size     00000ACD (2765)\n-06D96 Filename Length       0047 (71)\n-06D98 Extra Length          0000 (0)\n-06D9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+06E44 Compression Method    0008 (8) 'Deflated'\n+06E46 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+06E4A CRC                   82A5648F (2191877263)\n+06E4E Compressed Size       0000043B (1083)\n+06E52 Uncompressed Size     00000B13 (2835)\n+06E56 Filename Length       0047 (71)\n+06E58 Extra Length          0000 (0)\n+06E5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6D9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6E5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06DE1 PAYLOAD\n+06EA1 PAYLOAD\n \n-07214 LOCAL HEADER #45      04034B50 (67324752)\n-07218 Extract Zip Spec      14 (20) '2.0'\n-07219 Extract OS            00 (0) 'MS-DOS'\n-0721A General Purpose Flag  0800 (2048)\n+072DC LOCAL HEADER #45      04034B50 (67324752)\n+072E0 Extract Zip Spec      14 (20) '2.0'\n+072E1 Extract OS            00 (0) 'MS-DOS'\n+072E2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0721C Compression Method    0008 (8) 'Deflated'\n-0721E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-07222 CRC                   8C150447 (2350187591)\n-07226 Compressed Size       000003DB (987)\n-0722A Uncompressed Size     000009B8 (2488)\n-0722E Filename Length       0044 (68)\n-07230 Extra Length          0000 (0)\n-07232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+072E4 Compression Method    0008 (8) 'Deflated'\n+072E6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+072EA CRC                   DA27253B (3659998523)\n+072EE Compressed Size       000003E7 (999)\n+072F2 Uncompressed Size     000009FE (2558)\n+072F6 Filename Length       0044 (68)\n+072F8 Extra Length          0000 (0)\n+072FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x72FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07276 PAYLOAD\n+0733E PAYLOAD\n \n-07651 LOCAL HEADER #46      04034B50 (67324752)\n-07655 Extract Zip Spec      14 (20) '2.0'\n-07656 Extract OS            00 (0) 'MS-DOS'\n-07657 General Purpose Flag  0800 (2048)\n+07725 LOCAL HEADER #46      04034B50 (67324752)\n+07729 Extract Zip Spec      14 (20) '2.0'\n+0772A Extract OS            00 (0) 'MS-DOS'\n+0772B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07659 Compression Method    0008 (8) 'Deflated'\n-0765B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0765F CRC                   288B644A (680223818)\n-07663 Compressed Size       00000391 (913)\n-07667 Uncompressed Size     0000079B (1947)\n-0766B Filename Length       0041 (65)\n-0766D Extra Length          0000 (0)\n-0766F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0772D Compression Method    0008 (8) 'Deflated'\n+0772F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+07733 CRC                   3AE3106C (987959404)\n+07737 Compressed Size       0000039B (923)\n+0773B Uncompressed Size     000007D5 (2005)\n+0773F Filename Length       0041 (65)\n+07741 Extra Length          0000 (0)\n+07743 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x766F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7743: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-076B0 PAYLOAD\n+07784 PAYLOAD\n \n-07A41 LOCAL HEADER #47      04034B50 (67324752)\n-07A45 Extract Zip Spec      14 (20) '2.0'\n-07A46 Extract OS            00 (0) 'MS-DOS'\n-07A47 General Purpose Flag  0800 (2048)\n+07B1F LOCAL HEADER #47      04034B50 (67324752)\n+07B23 Extract Zip Spec      14 (20) '2.0'\n+07B24 Extract OS            00 (0) 'MS-DOS'\n+07B25 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07A49 Compression Method    0008 (8) 'Deflated'\n-07A4B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-07A4F CRC                   A6C8F390 (2798187408)\n-07A53 Compressed Size       00000491 (1169)\n-07A57 Uncompressed Size     00000C41 (3137)\n-07A5B Filename Length       0040 (64)\n-07A5D Extra Length          0000 (0)\n-07A5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07B27 Compression Method    0008 (8) 'Deflated'\n+07B29 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+07B2D CRC                   5241C10C (1380040972)\n+07B31 Compressed Size       0000049D (1181)\n+07B35 Uncompressed Size     00000C91 (3217)\n+07B39 Filename Length       0040 (64)\n+07B3B Extra Length          0000 (0)\n+07B3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7A5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07A9F PAYLOAD\n+07B7D PAYLOAD\n \n-07F30 LOCAL HEADER #48      04034B50 (67324752)\n-07F34 Extract Zip Spec      14 (20) '2.0'\n-07F35 Extract OS            00 (0) 'MS-DOS'\n-07F36 General Purpose Flag  0800 (2048)\n+0801A LOCAL HEADER #48      04034B50 (67324752)\n+0801E Extract Zip Spec      14 (20) '2.0'\n+0801F Extract OS            00 (0) 'MS-DOS'\n+08020 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07F38 Compression Method    0008 (8) 'Deflated'\n-07F3A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-07F3E CRC                   7350CC44 (1934675012)\n-07F42 Compressed Size       000002CA (714)\n-07F46 Uncompressed Size     000005A3 (1443)\n-07F4A Filename Length       003D (61)\n-07F4C Extra Length          0000 (0)\n-07F4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08022 Compression Method    0008 (8) 'Deflated'\n+08024 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08028 CRC                   30FBCCB4 (821808308)\n+0802C Compressed Size       000002D4 (724)\n+08030 Uncompressed Size     000005CD (1485)\n+08034 Filename Length       003D (61)\n+08036 Extra Length          0000 (0)\n+08038 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7F4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8038: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07F8B PAYLOAD\n+08075 PAYLOAD\n \n-08255 LOCAL HEADER #49      04034B50 (67324752)\n-08259 Extract Zip Spec      14 (20) '2.0'\n-0825A Extract OS            00 (0) 'MS-DOS'\n-0825B General Purpose Flag  0800 (2048)\n+08349 LOCAL HEADER #49      04034B50 (67324752)\n+0834D Extract Zip Spec      14 (20) '2.0'\n+0834E Extract OS            00 (0) 'MS-DOS'\n+0834F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0825D Compression Method    0008 (8) 'Deflated'\n-0825F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-08263 CRC                   53726EBB (1400008379)\n-08267 Compressed Size       000002A5 (677)\n-0826B Uncompressed Size     00000567 (1383)\n-0826F Filename Length       0045 (69)\n-08271 Extra Length          0000 (0)\n-08273 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08351 Compression Method    0008 (8) 'Deflated'\n+08353 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08357 CRC                   397FE7C7 (964683719)\n+0835B Compressed Size       000002AD (685)\n+0835F Uncompressed Size     00000592 (1426)\n+08363 Filename Length       0045 (69)\n+08365 Extra Length          0000 (0)\n+08367 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8273: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8367: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-082B8 PAYLOAD\n+083AC PAYLOAD\n \n-0855D LOCAL HEADER #50      04034B50 (67324752)\n-08561 Extract Zip Spec      14 (20) '2.0'\n-08562 Extract OS            00 (0) 'MS-DOS'\n-08563 General Purpose Flag  0800 (2048)\n+08659 LOCAL HEADER #50      04034B50 (67324752)\n+0865D Extract Zip Spec      14 (20) '2.0'\n+0865E Extract OS            00 (0) 'MS-DOS'\n+0865F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08565 Compression Method    0008 (8) 'Deflated'\n-08567 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0856B CRC                   C61A5369 (3323614057)\n-0856F Compressed Size       00000423 (1059)\n-08573 Uncompressed Size     00000C49 (3145)\n-08577 Filename Length       0040 (64)\n-08579 Extra Length          0000 (0)\n-0857B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08661 Compression Method    0008 (8) 'Deflated'\n+08663 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08667 CRC                   6571F019 (1701965849)\n+0866B Compressed Size       0000042D (1069)\n+0866F Uncompressed Size     00000CAD (3245)\n+08673 Filename Length       0040 (64)\n+08675 Extra Length          0000 (0)\n+08677 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x857B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8677: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-085BB PAYLOAD\n+086B7 PAYLOAD\n \n-089DE LOCAL HEADER #51      04034B50 (67324752)\n-089E2 Extract Zip Spec      14 (20) '2.0'\n-089E3 Extract OS            00 (0) 'MS-DOS'\n-089E4 General Purpose Flag  0800 (2048)\n+08AE4 LOCAL HEADER #51      04034B50 (67324752)\n+08AE8 Extract Zip Spec      14 (20) '2.0'\n+08AE9 Extract OS            00 (0) 'MS-DOS'\n+08AEA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-089E6 Compression Method    0008 (8) 'Deflated'\n-089E8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-089EC CRC                   4594C88A (1167378570)\n-089F0 Compressed Size       000003FB (1019)\n-089F4 Uncompressed Size     00000BC7 (3015)\n-089F8 Filename Length       0041 (65)\n-089FA Extra Length          0000 (0)\n-089FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08AEC Compression Method    0008 (8) 'Deflated'\n+08AEE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08AF2 CRC                   7A468FD9 (2051444697)\n+08AF6 Compressed Size       00000402 (1026)\n+08AFA Uncompressed Size     00000C2C (3116)\n+08AFE Filename Length       0041 (65)\n+08B00 Extra Length          0000 (0)\n+08B02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x89FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8B02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08A3D PAYLOAD\n+08B43 PAYLOAD\n \n-08E38 LOCAL HEADER #52      04034B50 (67324752)\n-08E3C Extract Zip Spec      14 (20) '2.0'\n-08E3D Extract OS            00 (0) 'MS-DOS'\n-08E3E General Purpose Flag  0800 (2048)\n+08F45 LOCAL HEADER #52      04034B50 (67324752)\n+08F49 Extract Zip Spec      14 (20) '2.0'\n+08F4A Extract OS            00 (0) 'MS-DOS'\n+08F4B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08E40 Compression Method    0008 (8) 'Deflated'\n-08E42 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-08E46 CRC                   06EFE96C (116386156)\n-08E4A Compressed Size       0000064A (1610)\n-08E4E Uncompressed Size     000014BB (5307)\n-08E52 Filename Length       003E (62)\n-08E54 Extra Length          0000 (0)\n-08E56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08F4D Compression Method    0008 (8) 'Deflated'\n+08F4F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08F53 CRC                   FDA6691C (4255541532)\n+08F57 Compressed Size       00000658 (1624)\n+08F5B Uncompressed Size     00001578 (5496)\n+08F5F Filename Length       003E (62)\n+08F61 Extra Length          0000 (0)\n+08F63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8E56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8F63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08E94 PAYLOAD\n+08FA1 PAYLOAD\n \n-094DE LOCAL HEADER #53      04034B50 (67324752)\n-094E2 Extract Zip Spec      14 (20) '2.0'\n-094E3 Extract OS            00 (0) 'MS-DOS'\n-094E4 General Purpose Flag  0800 (2048)\n+095F9 LOCAL HEADER #53      04034B50 (67324752)\n+095FD Extract Zip Spec      14 (20) '2.0'\n+095FE Extract OS            00 (0) 'MS-DOS'\n+095FF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-094E6 Compression Method    0008 (8) 'Deflated'\n-094E8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-094EC CRC                   28793399 (679031705)\n-094F0 Compressed Size       00000506 (1286)\n-094F4 Uncompressed Size     00000DA7 (3495)\n-094F8 Filename Length       0039 (57)\n-094FA Extra Length          0000 (0)\n-094FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09601 Compression Method    0008 (8) 'Deflated'\n+09603 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+09607 CRC                   AD8A2A72 (2911513202)\n+0960B Compressed Size       00000510 (1296)\n+0960F Uncompressed Size     00000E16 (3606)\n+09613 Filename Length       0039 (57)\n+09615 Extra Length          0000 (0)\n+09617 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x94FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9617: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09535 PAYLOAD\n+09650 PAYLOAD\n \n-09A3B LOCAL HEADER #54      04034B50 (67324752)\n-09A3F Extract Zip Spec      14 (20) '2.0'\n-09A40 Extract OS            00 (0) 'MS-DOS'\n-09A41 General Purpose Flag  0800 (2048)\n+09B60 LOCAL HEADER #54      04034B50 (67324752)\n+09B64 Extract Zip Spec      14 (20) '2.0'\n+09B65 Extract OS            00 (0) 'MS-DOS'\n+09B66 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09A43 Compression Method    0008 (8) 'Deflated'\n-09A45 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-09A49 CRC                   A3334B6D (2738047853)\n-09A4D Compressed Size       00000452 (1106)\n-09A51 Uncompressed Size     00000CE7 (3303)\n-09A55 Filename Length       0046 (70)\n-09A57 Extra Length          0000 (0)\n-09A59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09B68 Compression Method    0008 (8) 'Deflated'\n+09B6A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+09B6E CRC                   EEF3CE31 (4008955441)\n+09B72 Compressed Size       0000045E (1118)\n+09B76 Uncompressed Size     00000D4D (3405)\n+09B7A Filename Length       0046 (70)\n+09B7C Extra Length          0000 (0)\n+09B7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x9A59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9B7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09A9F PAYLOAD\n+09BC4 PAYLOAD\n \n-09EF1 LOCAL HEADER #55      04034B50 (67324752)\n-09EF5 Extract Zip Spec      14 (20) '2.0'\n-09EF6 Extract OS            00 (0) 'MS-DOS'\n-09EF7 General Purpose Flag  0800 (2048)\n+0A022 LOCAL HEADER #55      04034B50 (67324752)\n+0A026 Extract Zip Spec      14 (20) '2.0'\n+0A027 Extract OS            00 (0) 'MS-DOS'\n+0A028 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09EF9 Compression Method    0008 (8) 'Deflated'\n-09EFB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-09EFF CRC                   04A20B3B (77728571)\n-09F03 Compressed Size       000003D3 (979)\n-09F07 Uncompressed Size     00000B66 (2918)\n-09F0B Filename Length       0034 (52)\n-09F0D Extra Length          0000 (0)\n-09F0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A02A Compression Method    0008 (8) 'Deflated'\n+0A02C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0A030 CRC                   B359713A (3008983354)\n+0A034 Compressed Size       000003DC (988)\n+0A038 Uncompressed Size     00000BB3 (2995)\n+0A03C Filename Length       0034 (52)\n+0A03E Extra Length          0000 (0)\n+0A040 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x9F0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA040: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09F43 PAYLOAD\n+0A074 PAYLOAD\n \n-0A316 LOCAL HEADER #56      04034B50 (67324752)\n-0A31A Extract Zip Spec      14 (20) '2.0'\n-0A31B Extract OS            00 (0) 'MS-DOS'\n-0A31C General Purpose Flag  0800 (2048)\n+0A450 LOCAL HEADER #56      04034B50 (67324752)\n+0A454 Extract Zip Spec      14 (20) '2.0'\n+0A455 Extract OS            00 (0) 'MS-DOS'\n+0A456 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A31E Compression Method    0008 (8) 'Deflated'\n-0A320 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0A324 CRC                   60C61EB2 (1623596722)\n-0A328 Compressed Size       00000253 (595)\n-0A32C Uncompressed Size     00000460 (1120)\n-0A330 Filename Length       003B (59)\n-0A332 Extra Length          0000 (0)\n-0A334 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A458 Compression Method    0008 (8) 'Deflated'\n+0A45A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0A45E CRC                   D1906BB3 (3515902899)\n+0A462 Compressed Size       0000025D (605)\n+0A466 Uncompressed Size     0000047E (1150)\n+0A46A Filename Length       003B (59)\n+0A46C Extra Length          0000 (0)\n+0A46E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA334: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA46E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A36F PAYLOAD\n+0A4A9 PAYLOAD\n \n-0A5C2 LOCAL HEADER #57      04034B50 (67324752)\n-0A5C6 Extract Zip Spec      14 (20) '2.0'\n-0A5C7 Extract OS            00 (0) 'MS-DOS'\n-0A5C8 General Purpose Flag  0800 (2048)\n+0A706 LOCAL HEADER #57      04034B50 (67324752)\n+0A70A Extract Zip Spec      14 (20) '2.0'\n+0A70B Extract OS            00 (0) 'MS-DOS'\n+0A70C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A5CA Compression Method    0008 (8) 'Deflated'\n-0A5CC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0A5D0 CRC                   5AB1BA26 (1521596966)\n-0A5D4 Compressed Size       00000507 (1287)\n-0A5D8 Uncompressed Size     00000E0A (3594)\n-0A5DC Filename Length       003C (60)\n-0A5DE Extra Length          0000 (0)\n-0A5E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A70E Compression Method    0008 (8) 'Deflated'\n+0A710 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0A714 CRC                   0375CF6B (58052459)\n+0A718 Compressed Size       00000513 (1299)\n+0A71C Uncompressed Size     00000E60 (3680)\n+0A720 Filename Length       003C (60)\n+0A722 Extra Length          0000 (0)\n+0A724 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA5E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA724: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A61C PAYLOAD\n+0A760 PAYLOAD\n \n-0AB23 LOCAL HEADER #58      04034B50 (67324752)\n-0AB27 Extract Zip Spec      14 (20) '2.0'\n-0AB28 Extract OS            00 (0) 'MS-DOS'\n-0AB29 General Purpose Flag  0800 (2048)\n+0AC73 LOCAL HEADER #58      04034B50 (67324752)\n+0AC77 Extract Zip Spec      14 (20) '2.0'\n+0AC78 Extract OS            00 (0) 'MS-DOS'\n+0AC79 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0AB2B Compression Method    0008 (8) 'Deflated'\n-0AB2D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0AB31 CRC                   ED364E79 (3979759225)\n-0AB35 Compressed Size       0000038B (907)\n-0AB39 Uncompressed Size     000008DD (2269)\n-0AB3D Filename Length       0052 (82)\n-0AB3F Extra Length          0000 (0)\n-0AB41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0AC7B Compression Method    0008 (8) 'Deflated'\n+0AC7D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0AC81 CRC                   D7F68AC0 (3623258816)\n+0AC85 Compressed Size       00000395 (917)\n+0AC89 Uncompressed Size     0000091C (2332)\n+0AC8D Filename Length       0052 (82)\n+0AC8F Extra Length          0000 (0)\n+0AC91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xAB41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xAC91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0AB93 PAYLOAD\n+0ACE3 PAYLOAD\n \n-0AF1E LOCAL HEADER #59      04034B50 (67324752)\n-0AF22 Extract Zip Spec      14 (20) '2.0'\n-0AF23 Extract OS            00 (0) 'MS-DOS'\n-0AF24 General Purpose Flag  0800 (2048)\n+0B078 LOCAL HEADER #59      04034B50 (67324752)\n+0B07C Extract Zip Spec      14 (20) '2.0'\n+0B07D Extract OS            00 (0) 'MS-DOS'\n+0B07E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0AF26 Compression Method    0008 (8) 'Deflated'\n-0AF28 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0AF2C CRC                   07379C13 (121084947)\n-0AF30 Compressed Size       00000228 (552)\n-0AF34 Uncompressed Size     000003D4 (980)\n-0AF38 Filename Length       0047 (71)\n-0AF3A Extra Length          0000 (0)\n-0AF3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B080 Compression Method    0008 (8) 'Deflated'\n+0B082 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0B086 CRC                   3D7B6838 (1031497784)\n+0B08A Compressed Size       0000022F (559)\n+0B08E Uncompressed Size     000003ED (1005)\n+0B092 Filename Length       0047 (71)\n+0B094 Extra Length          0000 (0)\n+0B096 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xAF3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB096: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0AF83 PAYLOAD\n+0B0DD PAYLOAD\n \n-0B1AB LOCAL HEADER #60      04034B50 (67324752)\n-0B1AF Extract Zip Spec      14 (20) '2.0'\n-0B1B0 Extract OS            00 (0) 'MS-DOS'\n-0B1B1 General Purpose Flag  0800 (2048)\n+0B30C LOCAL HEADER #60      04034B50 (67324752)\n+0B310 Extract Zip Spec      14 (20) '2.0'\n+0B311 Extract OS            00 (0) 'MS-DOS'\n+0B312 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B1B3 Compression Method    0008 (8) 'Deflated'\n-0B1B5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0B1B9 CRC                   AA1837AB (2853713835)\n-0B1BD Compressed Size       00000440 (1088)\n-0B1C1 Uncompressed Size     00000C62 (3170)\n-0B1C5 Filename Length       004E (78)\n-0B1C7 Extra Length          0000 (0)\n-0B1C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B314 Compression Method    0008 (8) 'Deflated'\n+0B316 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0B31A CRC                   475F83BC (1197441980)\n+0B31E Compressed Size       0000044A (1098)\n+0B322 Uncompressed Size     00000CBA (3258)\n+0B326 Filename Length       004E (78)\n+0B328 Extra Length          0000 (0)\n+0B32A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB1C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB32A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B217 PAYLOAD\n+0B378 PAYLOAD\n \n-0B657 LOCAL HEADER #61      04034B50 (67324752)\n-0B65B Extract Zip Spec      14 (20) '2.0'\n-0B65C Extract OS            00 (0) 'MS-DOS'\n-0B65D General Purpose Flag  0800 (2048)\n+0B7C2 LOCAL HEADER #61      04034B50 (67324752)\n+0B7C6 Extract Zip Spec      14 (20) '2.0'\n+0B7C7 Extract OS            00 (0) 'MS-DOS'\n+0B7C8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B65F Compression Method    0008 (8) 'Deflated'\n-0B661 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0B665 CRC                   C4C68375 (3301344117)\n-0B669 Compressed Size       0000036B (875)\n-0B66D Uncompressed Size     0000081D (2077)\n-0B671 Filename Length       003C (60)\n-0B673 Extra Length          0000 (0)\n-0B675 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B7CA Compression Method    0008 (8) 'Deflated'\n+0B7CC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0B7D0 CRC                   97BCAA4D (2545723981)\n+0B7D4 Compressed Size       00000375 (885)\n+0B7D8 Uncompressed Size     0000085B (2139)\n+0B7DC Filename Length       003C (60)\n+0B7DE Extra Length          0000 (0)\n+0B7E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB675: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB7E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B6B1 PAYLOAD\n+0B81C PAYLOAD\n \n-0BA1C LOCAL HEADER #62      04034B50 (67324752)\n-0BA20 Extract Zip Spec      14 (20) '2.0'\n-0BA21 Extract OS            00 (0) 'MS-DOS'\n-0BA22 General Purpose Flag  0800 (2048)\n+0BB91 LOCAL HEADER #62      04034B50 (67324752)\n+0BB95 Extract Zip Spec      14 (20) '2.0'\n+0BB96 Extract OS            00 (0) 'MS-DOS'\n+0BB97 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0BA24 Compression Method    0008 (8) 'Deflated'\n-0BA26 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0BA2A CRC                   F9021EF9 (4177665785)\n-0BA2E Compressed Size       0000040B (1035)\n-0BA32 Uncompressed Size     00000C7A (3194)\n-0BA36 Filename Length       0043 (67)\n-0BA38 Extra Length          0000 (0)\n-0BA3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0BB99 Compression Method    0008 (8) 'Deflated'\n+0BB9B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0BB9F CRC                   A0F529B3 (2700421555)\n+0BBA3 Compressed Size       00000417 (1047)\n+0BBA7 Uncompressed Size     00000CE3 (3299)\n+0BBAB Filename Length       0043 (67)\n+0BBAD Extra Length          0000 (0)\n+0BBAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xBA3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xBBAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0BA7D PAYLOAD\n+0BBF2 PAYLOAD\n \n-0BE88 LOCAL HEADER #63      04034B50 (67324752)\n-0BE8C Extract Zip Spec      14 (20) '2.0'\n-0BE8D Extract OS            00 (0) 'MS-DOS'\n-0BE8E General Purpose Flag  0800 (2048)\n+0C009 LOCAL HEADER #63      04034B50 (67324752)\n+0C00D Extract Zip Spec      14 (20) '2.0'\n+0C00E Extract OS            00 (0) 'MS-DOS'\n+0C00F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0BE90 Compression Method    0008 (8) 'Deflated'\n-0BE92 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0BE96 CRC                   D8F5C90C (3639986444)\n-0BE9A Compressed Size       0000042B (1067)\n-0BE9E Uncompressed Size     00000C3E (3134)\n-0BEA2 Filename Length       004A (74)\n-0BEA4 Extra Length          0000 (0)\n-0BEA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C011 Compression Method    0008 (8) 'Deflated'\n+0C013 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C017 CRC                   0978E7E9 (158918633)\n+0C01B Compressed Size       00000433 (1075)\n+0C01F Uncompressed Size     00000C93 (3219)\n+0C023 Filename Length       004A (74)\n+0C025 Extra Length          0000 (0)\n+0C027 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xBEA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC027: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0BEF0 PAYLOAD\n+0C071 PAYLOAD\n \n-0C31B LOCAL HEADER #64      04034B50 (67324752)\n-0C31F Extract Zip Spec      14 (20) '2.0'\n-0C320 Extract OS            00 (0) 'MS-DOS'\n-0C321 General Purpose Flag  0800 (2048)\n+0C4A4 LOCAL HEADER #64      04034B50 (67324752)\n+0C4A8 Extract Zip Spec      14 (20) '2.0'\n+0C4A9 Extract OS            00 (0) 'MS-DOS'\n+0C4AA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C323 Compression Method    0008 (8) 'Deflated'\n-0C325 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C329 CRC                   F7E9DD6B (4159298923)\n-0C32D Compressed Size       0000032F (815)\n-0C331 Uncompressed Size     00000871 (2161)\n-0C335 Filename Length       004D (77)\n-0C337 Extra Length          0000 (0)\n-0C339 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C4AC Compression Method    0008 (8) 'Deflated'\n+0C4AE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C4B2 CRC                   0929F211 (153743889)\n+0C4B6 Compressed Size       00000338 (824)\n+0C4BA Uncompressed Size     000008B7 (2231)\n+0C4BE Filename Length       004D (77)\n+0C4C0 Extra Length          0000 (0)\n+0C4C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC339: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC4C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C386 PAYLOAD\n+0C50F PAYLOAD\n \n-0C6B5 LOCAL HEADER #65      04034B50 (67324752)\n-0C6B9 Extract Zip Spec      14 (20) '2.0'\n-0C6BA Extract OS            00 (0) 'MS-DOS'\n-0C6BB General Purpose Flag  0800 (2048)\n+0C847 LOCAL HEADER #65      04034B50 (67324752)\n+0C84B Extract Zip Spec      14 (20) '2.0'\n+0C84C Extract OS            00 (0) 'MS-DOS'\n+0C84D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C6BD Compression Method    0008 (8) 'Deflated'\n-0C6BF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C6C3 CRC                   8DD7FA96 (2379741846)\n-0C6C7 Compressed Size       000011C6 (4550)\n-0C6CB Uncompressed Size     00004F7F (20351)\n-0C6CF Filename Length       0044 (68)\n-0C6D1 Extra Length          0000 (0)\n-0C6D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C84F Compression Method    0008 (8) 'Deflated'\n+0C851 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C855 CRC                   26D63221 (651571745)\n+0C859 Compressed Size       000011DD (4573)\n+0C85D Uncompressed Size     00005153 (20819)\n+0C861 Filename Length       0044 (68)\n+0C863 Extra Length          0000 (0)\n+0C865 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC6D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC865: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C717 PAYLOAD\n+0C8A9 PAYLOAD\n \n-0D8DD LOCAL HEADER #66      04034B50 (67324752)\n-0D8E1 Extract Zip Spec      14 (20) '2.0'\n-0D8E2 Extract OS            00 (0) 'MS-DOS'\n-0D8E3 General Purpose Flag  0800 (2048)\n+0DA86 LOCAL HEADER #66      04034B50 (67324752)\n+0DA8A Extract Zip Spec      14 (20) '2.0'\n+0DA8B Extract OS            00 (0) 'MS-DOS'\n+0DA8C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0D8E5 Compression Method    0008 (8) 'Deflated'\n-0D8E7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0D8EB CRC                   C31A43AC (3273278380)\n-0D8EF Compressed Size       00000427 (1063)\n-0D8F3 Uncompressed Size     00000A43 (2627)\n-0D8F7 Filename Length       004B (75)\n-0D8F9 Extra Length          0000 (0)\n-0D8FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0DA8E Compression Method    0008 (8) 'Deflated'\n+0DA90 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0DA94 CRC                   16EA47E7 (384452583)\n+0DA98 Compressed Size       0000042F (1071)\n+0DA9C Uncompressed Size     00000A81 (2689)\n+0DAA0 Filename Length       004B (75)\n+0DAA2 Extra Length          0000 (0)\n+0DAA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD8FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDAA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D946 PAYLOAD\n+0DAEF PAYLOAD\n \n-0DD6D LOCAL HEADER #67      04034B50 (67324752)\n-0DD71 Extract Zip Spec      14 (20) '2.0'\n-0DD72 Extract OS            00 (0) 'MS-DOS'\n-0DD73 General Purpose Flag  0800 (2048)\n+0DF1E LOCAL HEADER #67      04034B50 (67324752)\n+0DF22 Extract Zip Spec      14 (20) '2.0'\n+0DF23 Extract OS            00 (0) 'MS-DOS'\n+0DF24 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0DD75 Compression Method    0008 (8) 'Deflated'\n-0DD77 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0DD7B CRC                   4CCC6F49 (1288466249)\n-0DD7F Compressed Size       0000028B (651)\n-0DD83 Uncompressed Size     00000506 (1286)\n-0DD87 Filename Length       0037 (55)\n-0DD89 Extra Length          0000 (0)\n-0DD8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0DF26 Compression Method    0008 (8) 'Deflated'\n+0DF28 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0DF2C CRC                   82826623 (2189583907)\n+0DF30 Compressed Size       00000294 (660)\n+0DF34 Uncompressed Size     0000052A (1322)\n+0DF38 Filename Length       0037 (55)\n+0DF3A Extra Length          0000 (0)\n+0DF3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xDD8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDF3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0DDC2 PAYLOAD\n+0DF73 PAYLOAD\n \n-0E04D LOCAL HEADER #68      04034B50 (67324752)\n-0E051 Extract Zip Spec      14 (20) '2.0'\n-0E052 Extract OS            00 (0) 'MS-DOS'\n-0E053 General Purpose Flag  0800 (2048)\n+0E207 LOCAL HEADER #68      04034B50 (67324752)\n+0E20B Extract Zip Spec      14 (20) '2.0'\n+0E20C Extract OS            00 (0) 'MS-DOS'\n+0E20D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E055 Compression Method    0008 (8) 'Deflated'\n-0E057 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E05B CRC                   B342E8EC (3007506668)\n-0E05F Compressed Size       0000036C (876)\n-0E063 Uncompressed Size     0000096F (2415)\n-0E067 Filename Length       004D (77)\n-0E069 Extra Length          0000 (0)\n-0E06B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E20F Compression Method    0008 (8) 'Deflated'\n+0E211 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E215 CRC                   25BB24C3 (633021635)\n+0E219 Compressed Size       00000375 (885)\n+0E21D Uncompressed Size     000009A2 (2466)\n+0E221 Filename Length       004D (77)\n+0E223 Extra Length          0000 (0)\n+0E225 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE06B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE225: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E0B8 PAYLOAD\n+0E272 PAYLOAD\n \n-0E424 LOCAL HEADER #69      04034B50 (67324752)\n-0E428 Extract Zip Spec      14 (20) '2.0'\n-0E429 Extract OS            00 (0) 'MS-DOS'\n-0E42A General Purpose Flag  0800 (2048)\n+0E5E7 LOCAL HEADER #69      04034B50 (67324752)\n+0E5EB Extract Zip Spec      14 (20) '2.0'\n+0E5EC Extract OS            00 (0) 'MS-DOS'\n+0E5ED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E42C Compression Method    0008 (8) 'Deflated'\n-0E42E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E432 CRC                   CAD52129 (3402965289)\n-0E436 Compressed Size       00000C83 (3203)\n-0E43A Uncompressed Size     00003D87 (15751)\n-0E43E Filename Length       0047 (71)\n-0E440 Extra Length          0000 (0)\n-0E442 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E5EF Compression Method    0008 (8) 'Deflated'\n+0E5F1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E5F5 CRC                   9322DFB2 (2468536242)\n+0E5F9 Compressed Size       00000C99 (3225)\n+0E5FD Uncompressed Size     00003EDE (16094)\n+0E601 Filename Length       0047 (71)\n+0E603 Extra Length          0000 (0)\n+0E605 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE442: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE605: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E489 PAYLOAD\n+0E64C PAYLOAD\n \n-0F10C LOCAL HEADER #70      04034B50 (67324752)\n-0F110 Extract Zip Spec      14 (20) '2.0'\n-0F111 Extract OS            00 (0) 'MS-DOS'\n-0F112 General Purpose Flag  0800 (2048)\n+0F2E5 LOCAL HEADER #70      04034B50 (67324752)\n+0F2E9 Extract Zip Spec      14 (20) '2.0'\n+0F2EA Extract OS            00 (0) 'MS-DOS'\n+0F2EB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F114 Compression Method    0008 (8) 'Deflated'\n-0F116 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F11A CRC                   47F26503 (1207067907)\n-0F11E Compressed Size       000003FA (1018)\n-0F122 Uncompressed Size     000009C5 (2501)\n-0F126 Filename Length       0045 (69)\n-0F128 Extra Length          0000 (0)\n-0F12A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F2ED Compression Method    0008 (8) 'Deflated'\n+0F2EF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F2F3 CRC                   EE2E13F4 (3995997172)\n+0F2F7 Compressed Size       00000405 (1029)\n+0F2FB Uncompressed Size     00000A07 (2567)\n+0F2FF Filename Length       0045 (69)\n+0F301 Extra Length          0000 (0)\n+0F303 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF12A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF303: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0F16F PAYLOAD\n+0F348 PAYLOAD\n \n-0F569 LOCAL HEADER #71      04034B50 (67324752)\n-0F56D Extract Zip Spec      14 (20) '2.0'\n-0F56E Extract OS            00 (0) 'MS-DOS'\n-0F56F General Purpose Flag  0800 (2048)\n+0F74D LOCAL HEADER #71      04034B50 (67324752)\n+0F751 Extract Zip Spec      14 (20) '2.0'\n+0F752 Extract OS            00 (0) 'MS-DOS'\n+0F753 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F571 Compression Method    0008 (8) 'Deflated'\n-0F573 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F577 CRC                   19F0D91C (435214620)\n-0F57B Compressed Size       000004A1 (1185)\n-0F57F Uncompressed Size     00000D07 (3335)\n-0F583 Filename Length       0046 (70)\n-0F585 Extra Length          0000 (0)\n-0F587 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F755 Compression Method    0008 (8) 'Deflated'\n+0F757 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F75B CRC                   9044A5F3 (2420418035)\n+0F75F Compressed Size       000004AB (1195)\n+0F763 Uncompressed Size     00000D59 (3417)\n+0F767 Filename Length       0046 (70)\n+0F769 Extra Length          0000 (0)\n+0F76B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF587: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF76B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0F5CD PAYLOAD\n+0F7B1 PAYLOAD\n \n-0FA6E LOCAL HEADER #72      04034B50 (67324752)\n-0FA72 Extract Zip Spec      14 (20) '2.0'\n-0FA73 Extract OS            00 (0) 'MS-DOS'\n-0FA74 General Purpose Flag  0800 (2048)\n+0FC5C LOCAL HEADER #72      04034B50 (67324752)\n+0FC60 Extract Zip Spec      14 (20) '2.0'\n+0FC61 Extract OS            00 (0) 'MS-DOS'\n+0FC62 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FA76 Compression Method    0008 (8) 'Deflated'\n-0FA78 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FA7C CRC                   7E8AFFB4 (2123038644)\n-0FA80 Compressed Size       000002FC (764)\n-0FA84 Uncompressed Size     000007C3 (1987)\n-0FA88 Filename Length       0046 (70)\n-0FA8A Extra Length          0000 (0)\n-0FA8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FC64 Compression Method    0008 (8) 'Deflated'\n+0FC66 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FC6A CRC                   15CC2E88 (365702792)\n+0FC6E Compressed Size       00000305 (773)\n+0FC72 Uncompressed Size     000007FE (2046)\n+0FC76 Filename Length       0046 (70)\n+0FC78 Extra Length          0000 (0)\n+0FC7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFA8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFC7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0FAD2 PAYLOAD\n+0FCC0 PAYLOAD\n \n-0FDCE LOCAL HEADER #73      04034B50 (67324752)\n-0FDD2 Extract Zip Spec      14 (20) '2.0'\n-0FDD3 Extract OS            00 (0) 'MS-DOS'\n-0FDD4 General Purpose Flag  0800 (2048)\n+0FFC5 LOCAL HEADER #73      04034B50 (67324752)\n+0FFC9 Extract Zip Spec      14 (20) '2.0'\n+0FFCA Extract OS            00 (0) 'MS-DOS'\n+0FFCB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FDD6 Compression Method    0008 (8) 'Deflated'\n-0FDD8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FDDC CRC                   BE623F70 (3194109808)\n-0FDE0 Compressed Size       000007A0 (1952)\n-0FDE4 Uncompressed Size     00001B70 (7024)\n-0FDE8 Filename Length       0033 (51)\n-0FDEA Extra Length          0000 (0)\n-0FDEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FFCD Compression Method    0008 (8) 'Deflated'\n+0FFCF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FFD3 CRC                   A00D3EBD (2685222589)\n+0FFD7 Compressed Size       000007B4 (1972)\n+0FFDB Uncompressed Size     00001C52 (7250)\n+0FFDF Filename Length       0033 (51)\n+0FFE1 Extra Length          0000 (0)\n+0FFE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFDEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFFE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0FE1F PAYLOAD\n+10016 PAYLOAD\n \n-105BF LOCAL HEADER #74      04034B50 (67324752)\n-105C3 Extract Zip Spec      14 (20) '2.0'\n-105C4 Extract OS            00 (0) 'MS-DOS'\n-105C5 General Purpose Flag  0800 (2048)\n+107CA LOCAL HEADER #74      04034B50 (67324752)\n+107CE Extract Zip Spec      14 (20) '2.0'\n+107CF Extract OS            00 (0) 'MS-DOS'\n+107D0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-105C7 Compression Method    0008 (8) 'Deflated'\n-105C9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-105CD CRC                   C31D4A4B (3273476683)\n-105D1 Compressed Size       000004E7 (1255)\n-105D5 Uncompressed Size     0000120B (4619)\n-105D9 Filename Length       0039 (57)\n-105DB Extra Length          0000 (0)\n-105DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+107D2 Compression Method    0008 (8) 'Deflated'\n+107D4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+107D8 CRC                   69F2CD2A (1777519914)\n+107DC Compressed Size       000004F3 (1267)\n+107E0 Uncompressed Size     0000129C (4764)\n+107E4 Filename Length       0039 (57)\n+107E6 Extra Length          0000 (0)\n+107E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x105DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x107E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-10616 PAYLOAD\n+10821 PAYLOAD\n \n-10AFD LOCAL HEADER #75      04034B50 (67324752)\n-10B01 Extract Zip Spec      14 (20) '2.0'\n-10B02 Extract OS            00 (0) 'MS-DOS'\n-10B03 General Purpose Flag  0800 (2048)\n+10D14 LOCAL HEADER #75      04034B50 (67324752)\n+10D18 Extract Zip Spec      14 (20) '2.0'\n+10D19 Extract OS            00 (0) 'MS-DOS'\n+10D1A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10B05 Compression Method    0008 (8) 'Deflated'\n-10B07 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10B0B CRC                   B4E1FAB5 (3034708661)\n-10B0F Compressed Size       000006A7 (1703)\n-10B13 Uncompressed Size     0000180E (6158)\n-10B17 Filename Length       0036 (54)\n-10B19 Extra Length          0000 (0)\n-10B1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10D1C Compression Method    0008 (8) 'Deflated'\n+10D1E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10D22 CRC                   3A871853 (981932115)\n+10D26 Compressed Size       000006B8 (1720)\n+10D2A Uncompressed Size     000018D5 (6357)\n+10D2E Filename Length       0036 (54)\n+10D30 Extra Length          0000 (0)\n+10D32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10B1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10D32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-10B51 PAYLOAD\n+10D68 PAYLOAD\n \n-111F8 LOCAL HEADER #76      04034B50 (67324752)\n-111FC Extract Zip Spec      14 (20) '2.0'\n-111FD Extract OS            00 (0) 'MS-DOS'\n-111FE General Purpose Flag  0800 (2048)\n+11420 LOCAL HEADER #76      04034B50 (67324752)\n+11424 Extract Zip Spec      14 (20) '2.0'\n+11425 Extract OS            00 (0) 'MS-DOS'\n+11426 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-11200 Compression Method    0008 (8) 'Deflated'\n-11202 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-11206 CRC                   5668569D (1449678493)\n-1120A Compressed Size       00000468 (1128)\n-1120E Uncompressed Size     00000C7B (3195)\n-11212 Filename Length       0037 (55)\n-11214 Extra Length          0000 (0)\n-11216 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+11428 Compression Method    0008 (8) 'Deflated'\n+1142A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1142E CRC                   7BC9467A (2076788346)\n+11432 Compressed Size       00000473 (1139)\n+11436 Uncompressed Size     00000CE6 (3302)\n+1143A Filename Length       0037 (55)\n+1143C Extra Length          0000 (0)\n+1143E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x11216: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1143E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1124D PAYLOAD\n+11475 PAYLOAD\n \n-116B5 LOCAL HEADER #77      04034B50 (67324752)\n-116B9 Extract Zip Spec      14 (20) '2.0'\n-116BA Extract OS            00 (0) 'MS-DOS'\n-116BB General Purpose Flag  0800 (2048)\n+118E8 LOCAL HEADER #77      04034B50 (67324752)\n+118EC Extract Zip Spec      14 (20) '2.0'\n+118ED Extract OS            00 (0) 'MS-DOS'\n+118EE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-116BD Compression Method    0008 (8) 'Deflated'\n-116BF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-116C3 CRC                   EA525DAF (3931266479)\n-116C7 Compressed Size       00000284 (644)\n-116CB Uncompressed Size     000004C1 (1217)\n-116CF Filename Length       003D (61)\n-116D1 Extra Length          0000 (0)\n-116D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+118F0 Compression Method    0008 (8) 'Deflated'\n+118F2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+118F6 CRC                   8442F5C1 (2218980801)\n+118FA Compressed Size       0000028D (653)\n+118FE Uncompressed Size     000004E8 (1256)\n+11902 Filename Length       003D (61)\n+11904 Extra Length          0000 (0)\n+11906 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x116D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11906: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-11710 PAYLOAD\n+11943 PAYLOAD\n \n-11994 LOCAL HEADER #78      04034B50 (67324752)\n-11998 Extract Zip Spec      14 (20) '2.0'\n-11999 Extract OS            00 (0) 'MS-DOS'\n-1199A General Purpose Flag  0800 (2048)\n+11BD0 LOCAL HEADER #78      04034B50 (67324752)\n+11BD4 Extract Zip Spec      14 (20) '2.0'\n+11BD5 Extract OS            00 (0) 'MS-DOS'\n+11BD6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1199C Compression Method    0008 (8) 'Deflated'\n-1199E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-119A2 CRC                   6E98A8DB (1855498459)\n-119A6 Compressed Size       000002B8 (696)\n-119AA Uncompressed Size     0000063C (1596)\n-119AE Filename Length       003F (63)\n-119B0 Extra Length          0000 (0)\n-119B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+11BD8 Compression Method    0008 (8) 'Deflated'\n+11BDA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+11BDE CRC                   1B483D0F (457719055)\n+11BE2 Compressed Size       000002C0 (704)\n+11BE6 Uncompressed Size     00000667 (1639)\n+11BEA Filename Length       003F (63)\n+11BEC Extra Length          0000 (0)\n+11BEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x119B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11BEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-119F1 PAYLOAD\n+11C2D PAYLOAD\n \n-11CA9 LOCAL HEADER #79      04034B50 (67324752)\n-11CAD Extract Zip Spec      14 (20) '2.0'\n-11CAE Extract OS            00 (0) 'MS-DOS'\n-11CAF General Purpose Flag  0800 (2048)\n+11EED LOCAL HEADER #79      04034B50 (67324752)\n+11EF1 Extract Zip Spec      14 (20) '2.0'\n+11EF2 Extract OS            00 (0) 'MS-DOS'\n+11EF3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-11CB1 Compression Method    0008 (8) 'Deflated'\n-11CB3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-11CB7 CRC                   96165FE8 (2518048744)\n-11CBB Compressed Size       00000459 (1113)\n-11CBF Uncompressed Size     00000B47 (2887)\n-11CC3 Filename Length       0048 (72)\n-11CC5 Extra Length          0000 (0)\n-11CC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+11EF5 Compression Method    0008 (8) 'Deflated'\n+11EF7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+11EFB CRC                   B81EA5D5 (3089016277)\n+11EFF Compressed Size       00000466 (1126)\n+11F03 Uncompressed Size     00000B91 (2961)\n+11F07 Filename Length       0048 (72)\n+11F09 Extra Length          0000 (0)\n+11F0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x11CC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11F0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-11D0F PAYLOAD\n+11F53 PAYLOAD\n \n-12168 LOCAL HEADER #80      04034B50 (67324752)\n-1216C Extract Zip Spec      14 (20) '2.0'\n-1216D Extract OS            00 (0) 'MS-DOS'\n-1216E General Purpose Flag  0800 (2048)\n+123B9 LOCAL HEADER #80      04034B50 (67324752)\n+123BD Extract Zip Spec      14 (20) '2.0'\n+123BE Extract OS            00 (0) 'MS-DOS'\n+123BF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12170 Compression Method    0008 (8) 'Deflated'\n-12172 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-12176 CRC                   BB15446F (3138733167)\n-1217A Compressed Size       000002B3 (691)\n-1217E Uncompressed Size     00000540 (1344)\n-12182 Filename Length       0045 (69)\n-12184 Extra Length          0000 (0)\n-12186 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+123C1 Compression Method    0008 (8) 'Deflated'\n+123C3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+123C7 CRC                   EF780E16 (4017622550)\n+123CB Compressed Size       000002BD (701)\n+123CF Uncompressed Size     00000562 (1378)\n+123D3 Filename Length       0045 (69)\n+123D5 Extra Length          0000 (0)\n+123D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12186: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x123D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-121CB PAYLOAD\n+1241C PAYLOAD\n \n-1247E LOCAL HEADER #81      04034B50 (67324752)\n-12482 Extract Zip Spec      14 (20) '2.0'\n-12483 Extract OS            00 (0) 'MS-DOS'\n-12484 General Purpose Flag  0800 (2048)\n+126D9 LOCAL HEADER #81      04034B50 (67324752)\n+126DD Extract Zip Spec      14 (20) '2.0'\n+126DE Extract OS            00 (0) 'MS-DOS'\n+126DF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12486 Compression Method    0008 (8) 'Deflated'\n-12488 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1248C CRC                   C656CCE4 (3327577316)\n-12490 Compressed Size       00000388 (904)\n-12494 Uncompressed Size     00000872 (2162)\n-12498 Filename Length       0047 (71)\n-1249A Extra Length          0000 (0)\n-1249C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+126E1 Compression Method    0008 (8) 'Deflated'\n+126E3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+126E7 CRC                   CC678E8E (3429338766)\n+126EB Compressed Size       00000391 (913)\n+126EF Uncompressed Size     000008A3 (2211)\n+126F3 Filename Length       0047 (71)\n+126F5 Extra Length          0000 (0)\n+126F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1249C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x126F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-124E3 PAYLOAD\n+1273E PAYLOAD\n \n-1286B LOCAL HEADER #82      04034B50 (67324752)\n-1286F Extract Zip Spec      14 (20) '2.0'\n-12870 Extract OS            00 (0) 'MS-DOS'\n-12871 General Purpose Flag  0800 (2048)\n+12ACF LOCAL HEADER #82      04034B50 (67324752)\n+12AD3 Extract Zip Spec      14 (20) '2.0'\n+12AD4 Extract OS            00 (0) 'MS-DOS'\n+12AD5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12873 Compression Method    0008 (8) 'Deflated'\n-12875 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-12879 CRC                   6100366B (1627403883)\n-1287D Compressed Size       000004BA (1210)\n-12881 Uncompressed Size     000011E6 (4582)\n-12885 Filename Length       004A (74)\n-12887 Extra Length          0000 (0)\n-12889 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+12AD7 Compression Method    0008 (8) 'Deflated'\n+12AD9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+12ADD CRC                   5E735CAA (1584618666)\n+12AE1 Compressed Size       000004C3 (1219)\n+12AE5 Uncompressed Size     00001249 (4681)\n+12AE9 Filename Length       004A (74)\n+12AEB Extra Length          0000 (0)\n+12AED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12889: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x12AED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-128D3 PAYLOAD\n+12B37 PAYLOAD\n \n-12D8D LOCAL HEADER #83      04034B50 (67324752)\n-12D91 Extract Zip Spec      14 (20) '2.0'\n-12D92 Extract OS            00 (0) 'MS-DOS'\n-12D93 General Purpose Flag  0800 (2048)\n+12FFA LOCAL HEADER #83      04034B50 (67324752)\n+12FFE Extract Zip Spec      14 (20) '2.0'\n+12FFF Extract OS            00 (0) 'MS-DOS'\n+13000 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12D95 Compression Method    0008 (8) 'Deflated'\n-12D97 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-12D9B CRC                   8939A522 (2302256418)\n-12D9F Compressed Size       000002B6 (694)\n-12DA3 Uncompressed Size     00000548 (1352)\n-12DA7 Filename Length       0047 (71)\n-12DA9 Extra Length          0000 (0)\n-12DAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+13002 Compression Method    0008 (8) 'Deflated'\n+13004 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+13008 CRC                   F08C4805 (4035725317)\n+1300C Compressed Size       000002C0 (704)\n+13010 Uncompressed Size     0000056A (1386)\n+13014 Filename Length       0047 (71)\n+13016 Extra Length          0000 (0)\n+13018 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12DAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x13018: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-12DF2 PAYLOAD\n+1305F PAYLOAD\n \n-130A8 LOCAL HEADER #84      04034B50 (67324752)\n-130AC Extract Zip Spec      14 (20) '2.0'\n-130AD Extract OS            00 (0) 'MS-DOS'\n-130AE General Purpose Flag  0800 (2048)\n+1331F LOCAL HEADER #84      04034B50 (67324752)\n+13323 Extract Zip Spec      14 (20) '2.0'\n+13324 Extract OS            00 (0) 'MS-DOS'\n+13325 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-130B0 Compression Method    0008 (8) 'Deflated'\n-130B2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-130B6 CRC                   2244431E (574898974)\n-130BA Compressed Size       00000301 (769)\n-130BE Uncompressed Size     000006DE (1758)\n-130C2 Filename Length       004B (75)\n-130C4 Extra Length          0000 (0)\n-130C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+13327 Compression Method    0008 (8) 'Deflated'\n+13329 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1332D CRC                   EACCF2B1 (3939300017)\n+13331 Compressed Size       0000030A (778)\n+13335 Uncompressed Size     00000704 (1796)\n+13339 Filename Length       004B (75)\n+1333B Extra Length          0000 (0)\n+1333D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x130C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1333D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13111 PAYLOAD\n+13388 PAYLOAD\n \n-13412 LOCAL HEADER #85      04034B50 (67324752)\n-13416 Extract Zip Spec      14 (20) '2.0'\n-13417 Extract OS            00 (0) 'MS-DOS'\n-13418 General Purpose Flag  0800 (2048)\n+13692 LOCAL HEADER #85      04034B50 (67324752)\n+13696 Extract Zip Spec      14 (20) '2.0'\n+13697 Extract OS            00 (0) 'MS-DOS'\n+13698 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1341A Compression Method    0008 (8) 'Deflated'\n-1341C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-13420 CRC                   6B0A1F36 (1795825462)\n-13424 Compressed Size       000002B6 (694)\n-13428 Uncompressed Size     00000544 (1348)\n-1342C Filename Length       0046 (70)\n-1342E Extra Length          0000 (0)\n-13430 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1369A Compression Method    0008 (8) 'Deflated'\n+1369C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+136A0 CRC                   69ADD8AE (1773000878)\n+136A4 Compressed Size       000002C0 (704)\n+136A8 Uncompressed Size     00000566 (1382)\n+136AC Filename Length       0046 (70)\n+136AE Extra Length          0000 (0)\n+136B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x13430: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x136B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13476 PAYLOAD\n+136F6 PAYLOAD\n \n-1372C LOCAL HEADER #86      04034B50 (67324752)\n-13730 Extract Zip Spec      14 (20) '2.0'\n-13731 Extract OS            00 (0) 'MS-DOS'\n-13732 General Purpose Flag  0800 (2048)\n+139B6 LOCAL HEADER #86      04034B50 (67324752)\n+139BA Extract Zip Spec      14 (20) '2.0'\n+139BB Extract OS            00 (0) 'MS-DOS'\n+139BC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-13734 Compression Method    0008 (8) 'Deflated'\n-13736 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1373A CRC                   F6AB8A5C (4138437212)\n-1373E Compressed Size       000003FD (1021)\n-13742 Uncompressed Size     00000B30 (2864)\n-13746 Filename Length       0059 (89)\n-13748 Extra Length          0000 (0)\n-1374A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+139BE Compression Method    0008 (8) 'Deflated'\n+139C0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+139C4 CRC                   2470BA0F (611367439)\n+139C8 Compressed Size       00000408 (1032)\n+139CC Uncompressed Size     00000B77 (2935)\n+139D0 Filename Length       0059 (89)\n+139D2 Extra Length          0000 (0)\n+139D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1374A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x139D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-137A3 PAYLOAD\n+13A2D PAYLOAD\n \n-13BA0 LOCAL HEADER #87      04034B50 (67324752)\n-13BA4 Extract Zip Spec      14 (20) '2.0'\n-13BA5 Extract OS            00 (0) 'MS-DOS'\n-13BA6 General Purpose Flag  0800 (2048)\n+13E35 LOCAL HEADER #87      04034B50 (67324752)\n+13E39 Extract Zip Spec      14 (20) '2.0'\n+13E3A Extract OS            00 (0) 'MS-DOS'\n+13E3B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-13BA8 Compression Method    0008 (8) 'Deflated'\n-13BAA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-13BAE CRC                   8ECDA075 (2395840629)\n-13BB2 Compressed Size       00000340 (832)\n-13BB6 Uncompressed Size     00000705 (1797)\n-13BBA Filename Length       004D (77)\n-13BBC Extra Length          0000 (0)\n-13BBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+13E3D Compression Method    0008 (8) 'Deflated'\n+13E3F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+13E43 CRC                   F02EA49E (4029588638)\n+13E47 Compressed Size       00000347 (839)\n+13E4B Uncompressed Size     00000730 (1840)\n+13E4F Filename Length       004D (77)\n+13E51 Extra Length          0000 (0)\n+13E53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x13BBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x13E53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13C0B PAYLOAD\n+13EA0 PAYLOAD\n \n-13F4B LOCAL HEADER #88      04034B50 (67324752)\n-13F4F Extract Zip Spec      14 (20) '2.0'\n-13F50 Extract OS            00 (0) 'MS-DOS'\n-13F51 General Purpose Flag  0800 (2048)\n+141E7 LOCAL HEADER #88      04034B50 (67324752)\n+141EB Extract Zip Spec      14 (20) '2.0'\n+141EC Extract OS            00 (0) 'MS-DOS'\n+141ED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-13F53 Compression Method    0008 (8) 'Deflated'\n-13F55 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-13F59 CRC                   C535197D (3308591485)\n-13F5D Compressed Size       0000033E (830)\n-13F61 Uncompressed Size     00000700 (1792)\n-13F65 Filename Length       004C (76)\n-13F67 Extra Length          0000 (0)\n-13F69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+141EF Compression Method    0008 (8) 'Deflated'\n+141F1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+141F5 CRC                   91BA4E47 (2444906055)\n+141F9 Compressed Size       00000346 (838)\n+141FD Uncompressed Size     0000072B (1835)\n+14201 Filename Length       004C (76)\n+14203 Extra Length          0000 (0)\n+14205 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x13F69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x14205: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13FB5 PAYLOAD\n+14251 PAYLOAD\n \n-142F3 LOCAL HEADER #89      04034B50 (67324752)\n-142F7 Extract Zip Spec      14 (20) '2.0'\n-142F8 Extract OS            00 (0) 'MS-DOS'\n-142F9 General Purpose Flag  0800 (2048)\n+14597 LOCAL HEADER #89      04034B50 (67324752)\n+1459B Extract Zip Spec      14 (20) '2.0'\n+1459C Extract OS            00 (0) 'MS-DOS'\n+1459D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-142FB Compression Method    0008 (8) 'Deflated'\n-142FD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-14301 CRC                   A895CAB3 (2828389043)\n-14305 Compressed Size       000006F8 (1784)\n-14309 Uncompressed Size     00001870 (6256)\n-1430D Filename Length       0052 (82)\n-1430F Extra Length          0000 (0)\n-14311 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1459F Compression Method    0008 (8) 'Deflated'\n+145A1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+145A5 CRC                   594A4504 (1498039556)\n+145A9 Compressed Size       00000705 (1797)\n+145AD Uncompressed Size     000018FD (6397)\n+145B1 Filename Length       0052 (82)\n+145B3 Extra Length          0000 (0)\n+145B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x14311: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x145B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-14363 PAYLOAD\n+14607 PAYLOAD\n \n-14A5B LOCAL HEADER #90      04034B50 (67324752)\n-14A5F Extract Zip Spec      14 (20) '2.0'\n-14A60 Extract OS            00 (0) 'MS-DOS'\n-14A61 General Purpose Flag  0800 (2048)\n+14D0C LOCAL HEADER #90      04034B50 (67324752)\n+14D10 Extract Zip Spec      14 (20) '2.0'\n+14D11 Extract OS            00 (0) 'MS-DOS'\n+14D12 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-14A63 Compression Method    0008 (8) 'Deflated'\n-14A65 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-14A69 CRC                   C67BB267 (3329995367)\n-14A6D Compressed Size       00000584 (1412)\n-14A71 Uncompressed Size     0000106A (4202)\n-14A75 Filename Length       004C (76)\n-14A77 Extra Length          0000 (0)\n-14A79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+14D14 Compression Method    0008 (8) 'Deflated'\n+14D16 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+14D1A CRC                   FF3DB830 (4282234928)\n+14D1E Compressed Size       0000058E (1422)\n+14D22 Uncompressed Size     000010CE (4302)\n+14D26 Filename Length       004C (76)\n+14D28 Extra Length          0000 (0)\n+14D2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x14A79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x14D2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-14AC5 PAYLOAD\n+14D76 PAYLOAD\n \n-15049 LOCAL HEADER #91      04034B50 (67324752)\n-1504D Extract Zip Spec      14 (20) '2.0'\n-1504E Extract OS            00 (0) 'MS-DOS'\n-1504F General Purpose Flag  0800 (2048)\n+15304 LOCAL HEADER #91      04034B50 (67324752)\n+15308 Extract Zip Spec      14 (20) '2.0'\n+15309 Extract OS            00 (0) 'MS-DOS'\n+1530A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15051 Compression Method    0008 (8) 'Deflated'\n-15053 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15057 CRC                   ACE74F1F (2900840223)\n-1505B Compressed Size       00000035 (53)\n-1505F Uncompressed Size     0000003D (61)\n-15063 Filename Length       0046 (70)\n-15065 Extra Length          0000 (0)\n-15067 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1530C Compression Method    0008 (8) 'Deflated'\n+1530E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15312 CRC                   ACE74F1F (2900840223)\n+15316 Compressed Size       00000035 (53)\n+1531A Uncompressed Size     0000003D (61)\n+1531E Filename Length       0046 (70)\n+15320 Extra Length          0000 (0)\n+15322 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15067: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15322: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-150AD PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+15368 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-150E2 LOCAL HEADER #92      04034B50 (67324752)\n-150E6 Extract Zip Spec      14 (20) '2.0'\n-150E7 Extract OS            00 (0) 'MS-DOS'\n-150E8 General Purpose Flag  0800 (2048)\n+1539D LOCAL HEADER #92      04034B50 (67324752)\n+153A1 Extract Zip Spec      14 (20) '2.0'\n+153A2 Extract OS            00 (0) 'MS-DOS'\n+153A3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-150EA Compression Method    0008 (8) 'Deflated'\n-150EC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-150F0 CRC                   F8A431C6 (4171510214)\n-150F4 Compressed Size       00000044 (68)\n-150F8 Uncompressed Size     00000047 (71)\n-150FC Filename Length       0044 (68)\n-150FE Extra Length          0000 (0)\n-15100 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+153A5 Compression Method    0008 (8) 'Deflated'\n+153A7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+153AB CRC                   F8A431C6 (4171510214)\n+153AF Compressed Size       00000044 (68)\n+153B3 Uncompressed Size     00000047 (71)\n+153B7 Filename Length       0044 (68)\n+153B9 Extra Length          0000 (0)\n+153BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15100: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x153BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15144 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+153FF PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-15188 LOCAL HEADER #93      04034B50 (67324752)\n-1518C Extract Zip Spec      14 (20) '2.0'\n-1518D Extract OS            00 (0) 'MS-DOS'\n-1518E General Purpose Flag  0800 (2048)\n+15443 LOCAL HEADER #93      04034B50 (67324752)\n+15447 Extract Zip Spec      14 (20) '2.0'\n+15448 Extract OS            00 (0) 'MS-DOS'\n+15449 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15190 Compression Method    0008 (8) 'Deflated'\n-15192 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15196 CRC                   D03529EC (3493145068)\n-1519A Compressed Size       00000062 (98)\n-1519E Uncompressed Size     00000113 (275)\n-151A2 Filename Length       0050 (80)\n-151A4 Extra Length          0000 (0)\n-151A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1544B Compression Method    0008 (8) 'Deflated'\n+1544D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15451 CRC                   3DF8163B (1039668795)\n+15455 Compressed Size       00000065 (101)\n+15459 Uncompressed Size     00000116 (278)\n+1545D Filename Length       0050 (80)\n+1545F Extra Length          0000 (0)\n+15461 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x151A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15461: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-151F6 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+154B1 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-15258 LOCAL HEADER #94      04034B50 (67324752)\n-1525C Extract Zip Spec      14 (20) '2.0'\n-1525D Extract OS            00 (0) 'MS-DOS'\n-1525E General Purpose Flag  0800 (2048)\n+15516 LOCAL HEADER #94      04034B50 (67324752)\n+1551A Extract Zip Spec      14 (20) '2.0'\n+1551B Extract OS            00 (0) 'MS-DOS'\n+1551C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15260 Compression Method    0008 (8) 'Deflated'\n-15262 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15266 CRC                   0C0A9CCA (202022090)\n-1526A Compressed Size       000000D3 (211)\n-1526E Uncompressed Size     000002CB (715)\n-15272 Filename Length       0058 (88)\n-15274 Extra Length          0000 (0)\n-15276 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1551E Compression Method    0008 (8) 'Deflated'\n+15520 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15524 CRC                   7138BB7F (1899543423)\n+15528 Compressed Size       000000D5 (213)\n+1552C Uncompressed Size     000002D4 (724)\n+15530 Filename Length       0058 (88)\n+15532 Extra Length          0000 (0)\n+15534 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15276: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15534: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-152CE PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1558C PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-153A1 LOCAL HEADER #95      04034B50 (67324752)\n-153A5 Extract Zip Spec      14 (20) '2.0'\n-153A6 Extract OS            00 (0) 'MS-DOS'\n-153A7 General Purpose Flag  0800 (2048)\n+15661 LOCAL HEADER #95      04034B50 (67324752)\n+15665 Extract Zip Spec      14 (20) '2.0'\n+15666 Extract OS            00 (0) 'MS-DOS'\n+15667 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-153A9 Compression Method    0008 (8) 'Deflated'\n-153AB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-153AF CRC                   CCA3FD93 (3433299347)\n-153B3 Compressed Size       0000006C (108)\n-153B7 Uncompressed Size     000000B6 (182)\n-153BB Filename Length       0052 (82)\n-153BD Extra Length          0000 (0)\n-153BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15669 Compression Method    0008 (8) 'Deflated'\n+1566B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1566F CRC                   0D088F60 (218664800)\n+15673 Compressed Size       0000006E (110)\n+15677 Uncompressed Size     000000B8 (184)\n+1567B Filename Length       0052 (82)\n+1567D Extra Length          0000 (0)\n+1567F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x153BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1567F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15411 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+156D1 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-1547D LOCAL HEADER #96      04034B50 (67324752)\n-15481 Extract Zip Spec      14 (20) '2.0'\n-15482 Extract OS            00 (0) 'MS-DOS'\n-15483 General Purpose Flag  0800 (2048)\n+1573F LOCAL HEADER #96      04034B50 (67324752)\n+15743 Extract Zip Spec      14 (20) '2.0'\n+15744 Extract OS            00 (0) 'MS-DOS'\n+15745 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15485 Compression Method    0008 (8) 'Deflated'\n-15487 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1548B CRC                   364739E6 (910637542)\n-1548F Compressed Size       000003CF (975)\n-15493 Uncompressed Size     00000BF2 (3058)\n-15497 Filename Length       003A (58)\n-15499 Extra Length          0000 (0)\n-1549B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15747 Compression Method    0008 (8) 'Deflated'\n+15749 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1574D CRC                   4FF02D0F (1341140239)\n+15751 Compressed Size       000003C8 (968)\n+15755 Uncompressed Size     00000BA1 (2977)\n+15759 Filename Length       003A (58)\n+1575B Extra Length          0000 (0)\n+1575D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1549B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1575D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-154D5 PAYLOAD\n+15797 PAYLOAD\n \n-158A4 LOCAL HEADER #97      04034B50 (67324752)\n-158A8 Extract Zip Spec      14 (20) '2.0'\n-158A9 Extract OS            00 (0) 'MS-DOS'\n-158AA General Purpose Flag  0800 (2048)\n+15B5F LOCAL HEADER #97      04034B50 (67324752)\n+15B63 Extract Zip Spec      14 (20) '2.0'\n+15B64 Extract OS            00 (0) 'MS-DOS'\n+15B65 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-158AC Compression Method    0008 (8) 'Deflated'\n-158AE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-158B2 CRC                   EC609363 (3965752163)\n-158B6 Compressed Size       00000047 (71)\n-158BA Uncompressed Size     00000049 (73)\n-158BE Filename Length       0041 (65)\n-158C0 Extra Length          0000 (0)\n-158C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15B67 Compression Method    0008 (8) 'Deflated'\n+15B69 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15B6D CRC                   EC609363 (3965752163)\n+15B71 Compressed Size       00000047 (71)\n+15B75 Uncompressed Size     00000049 (73)\n+15B79 Filename Length       0041 (65)\n+15B7B Extra Length          0000 (0)\n+15B7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x158C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15B7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15903 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+15BBE PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-1594A CENTRAL HEADER #1     02014B50 (33639248)\n-1594E Created Zip Spec      14 (20) '2.0'\n-1594F Created OS            03 (3) 'Unix'\n-15950 Extract Zip Spec      14 (20) '2.0'\n-15951 Extract OS            00 (0) 'MS-DOS'\n-15952 General Purpose Flag  0800 (2048)\n+15C05 CENTRAL HEADER #1     02014B50 (33639248)\n+15C09 Created Zip Spec      14 (20) '2.0'\n+15C0A Created OS            03 (3) 'Unix'\n+15C0B Extract Zip Spec      14 (20) '2.0'\n+15C0C Extract OS            00 (0) 'MS-DOS'\n+15C0D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15954 Compression Method    0008 (8) 'Deflated'\n-15956 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1595A CRC                   A689EB18 (2794056472)\n-1595E Compressed Size       00000042 (66)\n-15962 Uncompressed Size     00000040 (64)\n-15966 Filename Length       0014 (20)\n-15968 Extra Length          0000 (0)\n-1596A Comment Length        0000 (0)\n-1596C Disk Start            0000 (0)\n-1596E Int File Attributes   0000 (0)\n+15C0F Compression Method    0008 (8) 'Deflated'\n+15C11 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15C15 CRC                   A689EB18 (2794056472)\n+15C19 Compressed Size       00000042 (66)\n+15C1D Uncompressed Size     00000040 (64)\n+15C21 Filename Length       0014 (20)\n+15C23 Extra Length          0000 (0)\n+15C25 Comment Length        0000 (0)\n+15C27 Disk Start            0000 (0)\n+15C29 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15970 Ext File Attributes   81A40000 (2175008768)\n+15C2B 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-15974 Local Header Offset   00000000 (0)\n-15978 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+15C2F Local Header Offset   00000000 (0)\n+15C33 Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15978: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15C33: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1598C CENTRAL HEADER #2     02014B50 (33639248)\n-15990 Created Zip Spec      14 (20) '2.0'\n-15991 Created OS            03 (3) 'Unix'\n-15992 Extract Zip Spec      0A (10) '1.0'\n-15993 Extract OS            00 (0) 'MS-DOS'\n-15994 General Purpose Flag  0800 (2048)\n+15C47 CENTRAL HEADER #2     02014B50 (33639248)\n+15C4B Created Zip Spec      14 (20) '2.0'\n+15C4C Created OS            03 (3) 'Unix'\n+15C4D Extract Zip Spec      0A (10) '1.0'\n+15C4E Extract OS            00 (0) 'MS-DOS'\n+15C4F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-15996 Compression Method    0000 (0) 'Stored'\n-15998 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1599C CRC                   00000000 (0)\n-159A0 Compressed Size       00000000 (0)\n-159A4 Uncompressed Size     00000000 (0)\n-159A8 Filename Length       0009 (9)\n-159AA Extra Length          0000 (0)\n-159AC Comment Length        0000 (0)\n-159AE Disk Start            0000 (0)\n-159B0 Int File Attributes   0000 (0)\n+15C51 Compression Method    0000 (0) 'Stored'\n+15C53 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15C57 CRC                   00000000 (0)\n+15C5B Compressed Size       00000000 (0)\n+15C5F Uncompressed Size     00000000 (0)\n+15C63 Filename Length       0009 (9)\n+15C65 Extra Length          0000 (0)\n+15C67 Comment Length        0000 (0)\n+15C69 Disk Start            0000 (0)\n+15C6B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-159B2 Ext File Attributes   41ED0010 (1106051088)\n+15C6D 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-159B6 Local Header Offset   00000074 (116)\n-159BA Filename              'XXXXXXXXX'\n+15C71 Local Header Offset   00000074 (116)\n+15C75 Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0x159BA: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0x15C75: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x159BA: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15C75: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15992: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0x15C4D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-159C3 CENTRAL HEADER #3     02014B50 (33639248)\n-159C7 Created Zip Spec      14 (20) '2.0'\n-159C8 Created OS            03 (3) 'Unix'\n-159C9 Extract Zip Spec      0A (10) '1.0'\n-159CA Extract OS            00 (0) 'MS-DOS'\n-159CB General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-159CD Compression Method    0000 (0) 'Stored'\n-159CF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-159D3 CRC                   00000000 (0)\n-159D7 Compressed Size       00000000 (0)\n-159DB Uncompressed Size     00000000 (0)\n-159DF Filename Length       0004 (4)\n-159E1 Extra Length          0000 (0)\n-159E3 Comment Length        0000 (0)\n-159E5 Disk Start            0000 (0)\n-159E7 Int File Attributes   0000 (0)\n+15C7E CENTRAL HEADER #3     02014B50 (33639248)\n+15C82 Created Zip Spec      14 (20) '2.0'\n+15C83 Created OS            03 (3) 'Unix'\n+15C84 Extract Zip Spec      0A (10) '1.0'\n+15C85 Extract OS            00 (0) 'MS-DOS'\n+15C86 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15C88 Compression Method    0000 (0) 'Stored'\n+15C8A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15C8E CRC                   00000000 (0)\n+15C92 Compressed Size       00000000 (0)\n+15C96 Uncompressed Size     00000000 (0)\n+15C9A Filename Length       0004 (4)\n+15C9C Extra Length          0000 (0)\n+15C9E Comment Length        0000 (0)\n+15CA0 Disk Start            0000 (0)\n+15CA2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-159E9 Ext File Attributes   41ED0010 (1106051088)\n+15CA4 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-159ED Local Header Offset   0000009B (155)\n-159F1 Filename              'XXXX'\n+15CA8 Local Header Offset   0000009B (155)\n+15CAC Filename              'XXXX'\n #\n-# WARNING: Offset 0x159F1: Filename 'XXXX'\n+# WARNING: Offset 0x15CAC: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x159F1: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0x15CAC: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x159C9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0x15C84: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-159F5 CENTRAL HEADER #4     02014B50 (33639248)\n-159F9 Created Zip Spec      14 (20) '2.0'\n-159FA Created OS            03 (3) 'Unix'\n-159FB Extract Zip Spec      0A (10) '1.0'\n-159FC Extract OS            00 (0) 'MS-DOS'\n-159FD General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-159FF Compression Method    0000 (0) 'Stored'\n-15A01 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15A05 CRC                   00000000 (0)\n-15A09 Compressed Size       00000000 (0)\n-15A0D Uncompressed Size     00000000 (0)\n-15A11 Filename Length       000B (11)\n-15A13 Extra Length          0000 (0)\n-15A15 Comment Length        0000 (0)\n-15A17 Disk Start            0000 (0)\n-15A19 Int File Attributes   0000 (0)\n+15CB0 CENTRAL HEADER #4     02014B50 (33639248)\n+15CB4 Created Zip Spec      14 (20) '2.0'\n+15CB5 Created OS            03 (3) 'Unix'\n+15CB6 Extract Zip Spec      0A (10) '1.0'\n+15CB7 Extract OS            00 (0) 'MS-DOS'\n+15CB8 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15CBA Compression Method    0000 (0) 'Stored'\n+15CBC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15CC0 CRC                   00000000 (0)\n+15CC4 Compressed Size       00000000 (0)\n+15CC8 Uncompressed Size     00000000 (0)\n+15CCC Filename Length       000B (11)\n+15CCE Extra Length          0000 (0)\n+15CD0 Comment Length        0000 (0)\n+15CD2 Disk Start            0000 (0)\n+15CD4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15A1B Ext File Attributes   41ED0010 (1106051088)\n+15CD6 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-15A1F Local Header Offset   000000BD (189)\n-15A23 Filename              'XXXXXXXXXXX'\n+15CDA Local Header Offset   000000BD (189)\n+15CDE Filename              'XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15A23: Filename 'XXXXXXXXXXX'\n+# WARNING: Offset 0x15CDE: Filename 'XXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15A23: Directory 'XXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15CDE: Directory 'XXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x159FB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n+# WARNING: Offset 0x15CB6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n #\n \n-15A2E CENTRAL HEADER #5     02014B50 (33639248)\n-15A32 Created Zip Spec      14 (20) '2.0'\n-15A33 Created OS            03 (3) 'Unix'\n-15A34 Extract Zip Spec      0A (10) '1.0'\n-15A35 Extract OS            00 (0) 'MS-DOS'\n-15A36 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15A38 Compression Method    0000 (0) 'Stored'\n-15A3A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15A3E CRC                   00000000 (0)\n-15A42 Compressed Size       00000000 (0)\n-15A46 Uncompressed Size     00000000 (0)\n-15A4A Filename Length       0011 (17)\n-15A4C Extra Length          0000 (0)\n-15A4E Comment Length        0000 (0)\n-15A50 Disk Start            0000 (0)\n-15A52 Int File Attributes   0000 (0)\n+15CE9 CENTRAL HEADER #5     02014B50 (33639248)\n+15CED Created Zip Spec      14 (20) '2.0'\n+15CEE Created OS            03 (3) 'Unix'\n+15CEF Extract Zip Spec      0A (10) '1.0'\n+15CF0 Extract OS            00 (0) 'MS-DOS'\n+15CF1 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15CF3 Compression Method    0000 (0) 'Stored'\n+15CF5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15CF9 CRC                   00000000 (0)\n+15CFD Compressed Size       00000000 (0)\n+15D01 Uncompressed Size     00000000 (0)\n+15D05 Filename Length       0011 (17)\n+15D07 Extra Length          0000 (0)\n+15D09 Comment Length        0000 (0)\n+15D0B Disk Start            0000 (0)\n+15D0D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15A54 Ext File Attributes   41ED0010 (1106051088)\n+15D0F 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-15A58 Local Header Offset   000000E6 (230)\n-15A5C Filename              'XXXXXXXXXXXXXXXXX'\n+15D13 Local Header Offset   000000E6 (230)\n+15D17 Filename              'XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15A5C: Filename 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15D17: Filename 'XXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15A5C: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15D17: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15A34: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15CEF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n #\n \n-15A6D CENTRAL HEADER #6     02014B50 (33639248)\n-15A71 Created Zip Spec      14 (20) '2.0'\n-15A72 Created OS            03 (3) 'Unix'\n-15A73 Extract Zip Spec      0A (10) '1.0'\n-15A74 Extract OS            00 (0) 'MS-DOS'\n-15A75 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15A77 Compression Method    0000 (0) 'Stored'\n-15A79 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15A7D CRC                   00000000 (0)\n-15A81 Compressed Size       00000000 (0)\n-15A85 Uncompressed Size     00000000 (0)\n-15A89 Filename Length       001A (26)\n-15A8B Extra Length          0000 (0)\n-15A8D Comment Length        0000 (0)\n-15A8F Disk Start            0000 (0)\n-15A91 Int File Attributes   0000 (0)\n+15D28 CENTRAL HEADER #6     02014B50 (33639248)\n+15D2C Created Zip Spec      14 (20) '2.0'\n+15D2D Created OS            03 (3) 'Unix'\n+15D2E Extract Zip Spec      0A (10) '1.0'\n+15D2F Extract OS            00 (0) 'MS-DOS'\n+15D30 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15D32 Compression Method    0000 (0) 'Stored'\n+15D34 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15D38 CRC                   00000000 (0)\n+15D3C Compressed Size       00000000 (0)\n+15D40 Uncompressed Size     00000000 (0)\n+15D44 Filename Length       001A (26)\n+15D46 Extra Length          0000 (0)\n+15D48 Comment Length        0000 (0)\n+15D4A Disk Start            0000 (0)\n+15D4C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15A93 Ext File Attributes   41ED0010 (1106051088)\n+15D4E 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-15A97 Local Header Offset   00000115 (277)\n-15A9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15D52 Local Header Offset   00000115 (277)\n+15D56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15A9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15D56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15A9B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15D56: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15A73: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15D2E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15AB5 CENTRAL HEADER #7     02014B50 (33639248)\n-15AB9 Created Zip Spec      14 (20) '2.0'\n-15ABA Created OS            03 (3) 'Unix'\n-15ABB Extract Zip Spec      0A (10) '1.0'\n-15ABC Extract OS            00 (0) 'MS-DOS'\n-15ABD General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15ABF Compression Method    0000 (0) 'Stored'\n-15AC1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15AC5 CRC                   00000000 (0)\n-15AC9 Compressed Size       00000000 (0)\n-15ACD Uncompressed Size     00000000 (0)\n-15AD1 Filename Length       0025 (37)\n-15AD3 Extra Length          0000 (0)\n-15AD5 Comment Length        0000 (0)\n-15AD7 Disk Start            0000 (0)\n-15AD9 Int File Attributes   0000 (0)\n+15D70 CENTRAL HEADER #7     02014B50 (33639248)\n+15D74 Created Zip Spec      14 (20) '2.0'\n+15D75 Created OS            03 (3) 'Unix'\n+15D76 Extract Zip Spec      0A (10) '1.0'\n+15D77 Extract OS            00 (0) 'MS-DOS'\n+15D78 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15D7A Compression Method    0000 (0) 'Stored'\n+15D7C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15D80 CRC                   00000000 (0)\n+15D84 Compressed Size       00000000 (0)\n+15D88 Uncompressed Size     00000000 (0)\n+15D8C Filename Length       0025 (37)\n+15D8E Extra Length          0000 (0)\n+15D90 Comment Length        0000 (0)\n+15D92 Disk Start            0000 (0)\n+15D94 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15ADB Ext File Attributes   41ED0010 (1106051088)\n+15D96 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-15ADF Local Header Offset   0000014D (333)\n-15AE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15D9A Local Header Offset   0000014D (333)\n+15D9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15AE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15D9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15AE3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15D9E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15ABB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15D76: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15B08 CENTRAL HEADER #8     02014B50 (33639248)\n-15B0C Created Zip Spec      14 (20) '2.0'\n-15B0D Created OS            03 (3) 'Unix'\n-15B0E Extract Zip Spec      0A (10) '1.0'\n-15B0F Extract OS            00 (0) 'MS-DOS'\n-15B10 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15B12 Compression Method    0000 (0) 'Stored'\n-15B14 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15B18 CRC                   00000000 (0)\n-15B1C Compressed Size       00000000 (0)\n-15B20 Uncompressed Size     00000000 (0)\n-15B24 Filename Length       002D (45)\n-15B26 Extra Length          0000 (0)\n-15B28 Comment Length        0000 (0)\n-15B2A Disk Start            0000 (0)\n-15B2C Int File Attributes   0000 (0)\n+15DC3 CENTRAL HEADER #8     02014B50 (33639248)\n+15DC7 Created Zip Spec      14 (20) '2.0'\n+15DC8 Created OS            03 (3) 'Unix'\n+15DC9 Extract Zip Spec      0A (10) '1.0'\n+15DCA Extract OS            00 (0) 'MS-DOS'\n+15DCB General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15DCD Compression Method    0000 (0) 'Stored'\n+15DCF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15DD3 CRC                   00000000 (0)\n+15DD7 Compressed Size       00000000 (0)\n+15DDB Uncompressed Size     00000000 (0)\n+15DDF Filename Length       002D (45)\n+15DE1 Extra Length          0000 (0)\n+15DE3 Comment Length        0000 (0)\n+15DE5 Disk Start            0000 (0)\n+15DE7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15B2E Ext File Attributes   41ED0010 (1106051088)\n+15DE9 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-15B32 Local Header Offset   00000190 (400)\n-15B36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15DED Local Header Offset   00000190 (400)\n+15DF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15B36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15DF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15B36: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15DF1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15B0E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15DC9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15B63 CENTRAL HEADER #9     02014B50 (33639248)\n-15B67 Created Zip Spec      14 (20) '2.0'\n-15B68 Created OS            03 (3) 'Unix'\n-15B69 Extract Zip Spec      0A (10) '1.0'\n-15B6A Extract OS            00 (0) 'MS-DOS'\n-15B6B General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15B6D Compression Method    0000 (0) 'Stored'\n-15B6F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15B73 CRC                   00000000 (0)\n-15B77 Compressed Size       00000000 (0)\n-15B7B Uncompressed Size     00000000 (0)\n-15B7F Filename Length       002B (43)\n-15B81 Extra Length          0000 (0)\n-15B83 Comment Length        0000 (0)\n-15B85 Disk Start            0000 (0)\n-15B87 Int File Attributes   0000 (0)\n+15E1E CENTRAL HEADER #9     02014B50 (33639248)\n+15E22 Created Zip Spec      14 (20) '2.0'\n+15E23 Created OS            03 (3) 'Unix'\n+15E24 Extract Zip Spec      0A (10) '1.0'\n+15E25 Extract OS            00 (0) 'MS-DOS'\n+15E26 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15E28 Compression Method    0000 (0) 'Stored'\n+15E2A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15E2E CRC                   00000000 (0)\n+15E32 Compressed Size       00000000 (0)\n+15E36 Uncompressed Size     00000000 (0)\n+15E3A Filename Length       002B (43)\n+15E3C Extra Length          0000 (0)\n+15E3E Comment Length        0000 (0)\n+15E40 Disk Start            0000 (0)\n+15E42 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15B89 Ext File Attributes   41ED0010 (1106051088)\n+15E44 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-15B8D Local Header Offset   000001DB (475)\n-15B91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15E48 Local Header Offset   000001DB (475)\n+15E4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15B91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15E4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15B91: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15E4C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15B69: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15E24: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15BBC CENTRAL HEADER #10    02014B50 (33639248)\n-15BC0 Created Zip Spec      14 (20) '2.0'\n-15BC1 Created OS            03 (3) 'Unix'\n-15BC2 Extract Zip Spec      0A (10) '1.0'\n-15BC3 Extract OS            00 (0) 'MS-DOS'\n-15BC4 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15BC6 Compression Method    0000 (0) 'Stored'\n-15BC8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15BCC CRC                   00000000 (0)\n-15BD0 Compressed Size       00000000 (0)\n-15BD4 Uncompressed Size     00000000 (0)\n-15BD8 Filename Length       002A (42)\n-15BDA Extra Length          0000 (0)\n-15BDC Comment Length        0000 (0)\n-15BDE Disk Start            0000 (0)\n-15BE0 Int File Attributes   0000 (0)\n+15E77 CENTRAL HEADER #10    02014B50 (33639248)\n+15E7B Created Zip Spec      14 (20) '2.0'\n+15E7C Created OS            03 (3) 'Unix'\n+15E7D Extract Zip Spec      0A (10) '1.0'\n+15E7E Extract OS            00 (0) 'MS-DOS'\n+15E7F General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15E81 Compression Method    0000 (0) 'Stored'\n+15E83 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15E87 CRC                   00000000 (0)\n+15E8B Compressed Size       00000000 (0)\n+15E8F Uncompressed Size     00000000 (0)\n+15E93 Filename Length       002A (42)\n+15E95 Extra Length          0000 (0)\n+15E97 Comment Length        0000 (0)\n+15E99 Disk Start            0000 (0)\n+15E9B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15BE2 Ext File Attributes   41ED0010 (1106051088)\n+15E9D 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-15BE6 Local Header Offset   00000224 (548)\n-15BEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15EA1 Local Header Offset   00000224 (548)\n+15EA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15BEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15EA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15BEA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15EA5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15BC2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15E7D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15C14 CENTRAL HEADER #11    02014B50 (33639248)\n-15C18 Created Zip Spec      14 (20) '2.0'\n-15C19 Created OS            03 (3) 'Unix'\n-15C1A Extract Zip Spec      0A (10) '1.0'\n-15C1B Extract OS            00 (0) 'MS-DOS'\n-15C1C General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15C1E Compression Method    0000 (0) 'Stored'\n-15C20 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15C24 CRC                   00000000 (0)\n-15C28 Compressed Size       00000000 (0)\n-15C2C Uncompressed Size     00000000 (0)\n-15C30 Filename Length       0021 (33)\n-15C32 Extra Length          0000 (0)\n-15C34 Comment Length        0000 (0)\n-15C36 Disk Start            0000 (0)\n-15C38 Int File Attributes   0000 (0)\n+15ECF CENTRAL HEADER #11    02014B50 (33639248)\n+15ED3 Created Zip Spec      14 (20) '2.0'\n+15ED4 Created OS            03 (3) 'Unix'\n+15ED5 Extract Zip Spec      0A (10) '1.0'\n+15ED6 Extract OS            00 (0) 'MS-DOS'\n+15ED7 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15ED9 Compression Method    0000 (0) 'Stored'\n+15EDB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15EDF CRC                   00000000 (0)\n+15EE3 Compressed Size       00000000 (0)\n+15EE7 Uncompressed Size     00000000 (0)\n+15EEB Filename Length       0021 (33)\n+15EED Extra Length          0000 (0)\n+15EEF Comment Length        0000 (0)\n+15EF1 Disk Start            0000 (0)\n+15EF3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15C3A Ext File Attributes   41ED0010 (1106051088)\n+15EF5 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-15C3E Local Header Offset   0000026C (620)\n-15C42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15EF9 Local Header Offset   0000026C (620)\n+15EFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15C42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15EFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15C42: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15EFD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15C1A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15ED5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15C63 CENTRAL HEADER #12    02014B50 (33639248)\n-15C67 Created Zip Spec      14 (20) '2.0'\n-15C68 Created OS            03 (3) 'Unix'\n-15C69 Extract Zip Spec      0A (10) '1.0'\n-15C6A Extract OS            00 (0) 'MS-DOS'\n-15C6B General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15C6D Compression Method    0000 (0) 'Stored'\n-15C6F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15C73 CRC                   00000000 (0)\n-15C77 Compressed Size       00000000 (0)\n-15C7B Uncompressed Size     00000000 (0)\n-15C7F Filename Length       002C (44)\n-15C81 Extra Length          0000 (0)\n-15C83 Comment Length        0000 (0)\n-15C85 Disk Start            0000 (0)\n-15C87 Int File Attributes   0000 (0)\n+15F1E CENTRAL HEADER #12    02014B50 (33639248)\n+15F22 Created Zip Spec      14 (20) '2.0'\n+15F23 Created OS            03 (3) 'Unix'\n+15F24 Extract Zip Spec      0A (10) '1.0'\n+15F25 Extract OS            00 (0) 'MS-DOS'\n+15F26 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15F28 Compression Method    0000 (0) 'Stored'\n+15F2A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15F2E CRC                   00000000 (0)\n+15F32 Compressed Size       00000000 (0)\n+15F36 Uncompressed Size     00000000 (0)\n+15F3A Filename Length       002C (44)\n+15F3C Extra Length          0000 (0)\n+15F3E Comment Length        0000 (0)\n+15F40 Disk Start            0000 (0)\n+15F42 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15C89 Ext File Attributes   41ED0010 (1106051088)\n+15F44 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-15C8D Local Header Offset   000002AB (683)\n-15C91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15F48 Local Header Offset   000002AB (683)\n+15F4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15C91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15F4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15C91: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15F4C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15C69: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15F24: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15CBD CENTRAL HEADER #13    02014B50 (33639248)\n-15CC1 Created Zip Spec      14 (20) '2.0'\n-15CC2 Created OS            03 (3) 'Unix'\n-15CC3 Extract Zip Spec      0A (10) '1.0'\n-15CC4 Extract OS            00 (0) 'MS-DOS'\n-15CC5 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15CC7 Compression Method    0000 (0) 'Stored'\n-15CC9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15CCD CRC                   00000000 (0)\n-15CD1 Compressed Size       00000000 (0)\n-15CD5 Uncompressed Size     00000000 (0)\n-15CD9 Filename Length       0029 (41)\n-15CDB Extra Length          0000 (0)\n-15CDD Comment Length        0000 (0)\n-15CDF Disk Start            0000 (0)\n-15CE1 Int File Attributes   0000 (0)\n+15F78 CENTRAL HEADER #13    02014B50 (33639248)\n+15F7C Created Zip Spec      14 (20) '2.0'\n+15F7D Created OS            03 (3) 'Unix'\n+15F7E Extract Zip Spec      0A (10) '1.0'\n+15F7F Extract OS            00 (0) 'MS-DOS'\n+15F80 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15F82 Compression Method    0000 (0) 'Stored'\n+15F84 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15F88 CRC                   00000000 (0)\n+15F8C Compressed Size       00000000 (0)\n+15F90 Uncompressed Size     00000000 (0)\n+15F94 Filename Length       0029 (41)\n+15F96 Extra Length          0000 (0)\n+15F98 Comment Length        0000 (0)\n+15F9A Disk Start            0000 (0)\n+15F9C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15CE3 Ext File Attributes   41ED0010 (1106051088)\n+15F9E 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-15CE7 Local Header Offset   000002F5 (757)\n-15CEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15FA2 Local Header Offset   000002F5 (757)\n+15FA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15CEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15FA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15CEB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15FA6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15CC3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15F7E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15D14 CENTRAL HEADER #14    02014B50 (33639248)\n-15D18 Created Zip Spec      14 (20) '2.0'\n-15D19 Created OS            03 (3) 'Unix'\n-15D1A Extract Zip Spec      0A (10) '1.0'\n-15D1B Extract OS            00 (0) 'MS-DOS'\n-15D1C General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15D1E Compression Method    0000 (0) 'Stored'\n-15D20 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15D24 CRC                   00000000 (0)\n-15D28 Compressed Size       00000000 (0)\n-15D2C Uncompressed Size     00000000 (0)\n-15D30 Filename Length       001F (31)\n-15D32 Extra Length          0000 (0)\n-15D34 Comment Length        0000 (0)\n-15D36 Disk Start            0000 (0)\n-15D38 Int File Attributes   0000 (0)\n+15FCF CENTRAL HEADER #14    02014B50 (33639248)\n+15FD3 Created Zip Spec      14 (20) '2.0'\n+15FD4 Created OS            03 (3) 'Unix'\n+15FD5 Extract Zip Spec      0A (10) '1.0'\n+15FD6 Extract OS            00 (0) 'MS-DOS'\n+15FD7 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+15FD9 Compression Method    0000 (0) 'Stored'\n+15FDB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+15FDF CRC                   00000000 (0)\n+15FE3 Compressed Size       00000000 (0)\n+15FE7 Uncompressed Size     00000000 (0)\n+15FEB Filename Length       001F (31)\n+15FED Extra Length          0000 (0)\n+15FEF Comment Length        0000 (0)\n+15FF1 Disk Start            0000 (0)\n+15FF3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15D3A Ext File Attributes   41ED0010 (1106051088)\n+15FF5 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-15D3E Local Header Offset   0000033C (828)\n-15D42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15FF9 Local Header Offset   0000033C (828)\n+15FFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15D42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15FFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15D42: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x15FFD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15D1A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15FD5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15D61 CENTRAL HEADER #15    02014B50 (33639248)\n-15D65 Created Zip Spec      14 (20) '2.0'\n-15D66 Created OS            03 (3) 'Unix'\n-15D67 Extract Zip Spec      0A (10) '1.0'\n-15D68 Extract OS            00 (0) 'MS-DOS'\n-15D69 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15D6B Compression Method    0000 (0) 'Stored'\n-15D6D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15D71 CRC                   00000000 (0)\n-15D75 Compressed Size       00000000 (0)\n-15D79 Uncompressed Size     00000000 (0)\n-15D7D Filename Length       0025 (37)\n-15D7F Extra Length          0000 (0)\n-15D81 Comment Length        0000 (0)\n-15D83 Disk Start            0000 (0)\n-15D85 Int File Attributes   0000 (0)\n+1601C CENTRAL HEADER #15    02014B50 (33639248)\n+16020 Created Zip Spec      14 (20) '2.0'\n+16021 Created OS            03 (3) 'Unix'\n+16022 Extract Zip Spec      0A (10) '1.0'\n+16023 Extract OS            00 (0) 'MS-DOS'\n+16024 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+16026 Compression Method    0000 (0) 'Stored'\n+16028 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1602C CRC                   00000000 (0)\n+16030 Compressed Size       00000000 (0)\n+16034 Uncompressed Size     00000000 (0)\n+16038 Filename Length       0025 (37)\n+1603A Extra Length          0000 (0)\n+1603C Comment Length        0000 (0)\n+1603E Disk Start            0000 (0)\n+16040 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15D87 Ext File Attributes   41ED0010 (1106051088)\n+16042 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-15D8B Local Header Offset   00000379 (889)\n-15D8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16046 Local Header Offset   00000379 (889)\n+1604A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15D8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1604A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15D8F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1604A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15D67: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16022: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15DB4 CENTRAL HEADER #16    02014B50 (33639248)\n-15DB8 Created Zip Spec      14 (20) '2.0'\n-15DB9 Created OS            03 (3) 'Unix'\n-15DBA Extract Zip Spec      0A (10) '1.0'\n-15DBB Extract OS            00 (0) 'MS-DOS'\n-15DBC General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15DBE Compression Method    0000 (0) 'Stored'\n-15DC0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15DC4 CRC                   00000000 (0)\n-15DC8 Compressed Size       00000000 (0)\n-15DCC Uncompressed Size     00000000 (0)\n-15DD0 Filename Length       0029 (41)\n-15DD2 Extra Length          0000 (0)\n-15DD4 Comment Length        0000 (0)\n-15DD6 Disk Start            0000 (0)\n-15DD8 Int File Attributes   0000 (0)\n+1606F CENTRAL HEADER #16    02014B50 (33639248)\n+16073 Created Zip Spec      14 (20) '2.0'\n+16074 Created OS            03 (3) 'Unix'\n+16075 Extract Zip Spec      0A (10) '1.0'\n+16076 Extract OS            00 (0) 'MS-DOS'\n+16077 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+16079 Compression Method    0000 (0) 'Stored'\n+1607B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1607F CRC                   00000000 (0)\n+16083 Compressed Size       00000000 (0)\n+16087 Uncompressed Size     00000000 (0)\n+1608B Filename Length       0029 (41)\n+1608D Extra Length          0000 (0)\n+1608F Comment Length        0000 (0)\n+16091 Disk Start            0000 (0)\n+16093 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15DDA Ext File Attributes   41ED0010 (1106051088)\n+16095 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-15DDE Local Header Offset   000003BC (956)\n-15DE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16099 Local Header Offset   000003BC (956)\n+1609D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15DE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1609D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15DE2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1609D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15DBA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16075: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15E0B CENTRAL HEADER #17    02014B50 (33639248)\n-15E0F Created Zip Spec      14 (20) '2.0'\n-15E10 Created OS            03 (3) 'Unix'\n-15E11 Extract Zip Spec      0A (10) '1.0'\n-15E12 Extract OS            00 (0) 'MS-DOS'\n-15E13 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15E15 Compression Method    0000 (0) 'Stored'\n-15E17 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15E1B CRC                   00000000 (0)\n-15E1F Compressed Size       00000000 (0)\n-15E23 Uncompressed Size     00000000 (0)\n-15E27 Filename Length       0020 (32)\n-15E29 Extra Length          0000 (0)\n-15E2B Comment Length        0000 (0)\n-15E2D Disk Start            0000 (0)\n-15E2F Int File Attributes   0000 (0)\n+160C6 CENTRAL HEADER #17    02014B50 (33639248)\n+160CA Created Zip Spec      14 (20) '2.0'\n+160CB Created OS            03 (3) 'Unix'\n+160CC Extract Zip Spec      0A (10) '1.0'\n+160CD Extract OS            00 (0) 'MS-DOS'\n+160CE General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+160D0 Compression Method    0000 (0) 'Stored'\n+160D2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+160D6 CRC                   00000000 (0)\n+160DA Compressed Size       00000000 (0)\n+160DE Uncompressed Size     00000000 (0)\n+160E2 Filename Length       0020 (32)\n+160E4 Extra Length          0000 (0)\n+160E6 Comment Length        0000 (0)\n+160E8 Disk Start            0000 (0)\n+160EA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15E31 Ext File Attributes   41ED0010 (1106051088)\n+160EC 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-15E35 Local Header Offset   00000403 (1027)\n-15E39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+160F0 Local Header Offset   00000403 (1027)\n+160F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15E39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x160F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15E39: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x160F4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15E11: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x160CC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15E59 CENTRAL HEADER #18    02014B50 (33639248)\n-15E5D Created Zip Spec      14 (20) '2.0'\n-15E5E Created OS            03 (3) 'Unix'\n-15E5F Extract Zip Spec      0A (10) '1.0'\n-15E60 Extract OS            00 (0) 'MS-DOS'\n-15E61 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15E63 Compression Method    0000 (0) 'Stored'\n-15E65 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15E69 CRC                   00000000 (0)\n-15E6D Compressed Size       00000000 (0)\n-15E71 Uncompressed Size     00000000 (0)\n-15E75 Filename Length       000F (15)\n-15E77 Extra Length          0000 (0)\n-15E79 Comment Length        0000 (0)\n-15E7B Disk Start            0000 (0)\n-15E7D Int File Attributes   0000 (0)\n+16114 CENTRAL HEADER #18    02014B50 (33639248)\n+16118 Created Zip Spec      14 (20) '2.0'\n+16119 Created OS            03 (3) 'Unix'\n+1611A Extract Zip Spec      0A (10) '1.0'\n+1611B Extract OS            00 (0) 'MS-DOS'\n+1611C General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1611E Compression Method    0000 (0) 'Stored'\n+16120 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16124 CRC                   00000000 (0)\n+16128 Compressed Size       00000000 (0)\n+1612C Uncompressed Size     00000000 (0)\n+16130 Filename Length       000F (15)\n+16132 Extra Length          0000 (0)\n+16134 Comment Length        0000 (0)\n+16136 Disk Start            0000 (0)\n+16138 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15E7F Ext File Attributes   41ED0010 (1106051088)\n+1613A 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-15E83 Local Header Offset   00000441 (1089)\n-15E87 Filename              'XXXXXXXXXXXXXXX'\n+1613E Local Header Offset   00000441 (1089)\n+16142 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15E87: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16142: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15E87: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x16142: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15E5F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1611A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-15E96 CENTRAL HEADER #19    02014B50 (33639248)\n-15E9A Created Zip Spec      14 (20) '2.0'\n-15E9B Created OS            03 (3) 'Unix'\n-15E9C Extract Zip Spec      0A (10) '1.0'\n-15E9D Extract OS            00 (0) 'MS-DOS'\n-15E9E General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15EA0 Compression Method    0000 (0) 'Stored'\n-15EA2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15EA6 CRC                   00000000 (0)\n-15EAA Compressed Size       00000000 (0)\n-15EAE Uncompressed Size     00000000 (0)\n-15EB2 Filename Length       0018 (24)\n-15EB4 Extra Length          0000 (0)\n-15EB6 Comment Length        0000 (0)\n-15EB8 Disk Start            0000 (0)\n-15EBA Int File Attributes   0000 (0)\n+16151 CENTRAL HEADER #19    02014B50 (33639248)\n+16155 Created Zip Spec      14 (20) '2.0'\n+16156 Created OS            03 (3) 'Unix'\n+16157 Extract Zip Spec      0A (10) '1.0'\n+16158 Extract OS            00 (0) 'MS-DOS'\n+16159 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1615B Compression Method    0000 (0) 'Stored'\n+1615D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16161 CRC                   00000000 (0)\n+16165 Compressed Size       00000000 (0)\n+16169 Uncompressed Size     00000000 (0)\n+1616D Filename Length       0018 (24)\n+1616F Extra Length          0000 (0)\n+16171 Comment Length        0000 (0)\n+16173 Disk Start            0000 (0)\n+16175 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15EBC Ext File Attributes   41ED0010 (1106051088)\n+16177 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-15EC0 Local Header Offset   0000046E (1134)\n-15EC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+1617B Local Header Offset   0000046E (1134)\n+1617F Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15EC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1617F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15EC4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x1617F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15E9C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16157: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15EDC CENTRAL HEADER #20    02014B50 (33639248)\n-15EE0 Created Zip Spec      14 (20) '2.0'\n-15EE1 Created OS            03 (3) 'Unix'\n-15EE2 Extract Zip Spec      0A (10) '1.0'\n-15EE3 Extract OS            00 (0) 'MS-DOS'\n-15EE4 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15EE6 Compression Method    0000 (0) 'Stored'\n-15EE8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15EEC CRC                   00000000 (0)\n-15EF0 Compressed Size       00000000 (0)\n-15EF4 Uncompressed Size     00000000 (0)\n-15EF8 Filename Length       000F (15)\n-15EFA Extra Length          0000 (0)\n-15EFC Comment Length        0000 (0)\n-15EFE Disk Start            0000 (0)\n-15F00 Int File Attributes   0000 (0)\n+16197 CENTRAL HEADER #20    02014B50 (33639248)\n+1619B Created Zip Spec      14 (20) '2.0'\n+1619C Created OS            03 (3) 'Unix'\n+1619D Extract Zip Spec      0A (10) '1.0'\n+1619E Extract OS            00 (0) 'MS-DOS'\n+1619F General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+161A1 Compression Method    0000 (0) 'Stored'\n+161A3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+161A7 CRC                   00000000 (0)\n+161AB Compressed Size       00000000 (0)\n+161AF Uncompressed Size     00000000 (0)\n+161B3 Filename Length       000F (15)\n+161B5 Extra Length          0000 (0)\n+161B7 Comment Length        0000 (0)\n+161B9 Disk Start            0000 (0)\n+161BB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15F02 Ext File Attributes   41ED0010 (1106051088)\n+161BD 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-15F06 Local Header Offset   000004A4 (1188)\n-15F0A Filename              'XXXXXXXXXXXXXXX'\n+161C1 Local Header Offset   000004A4 (1188)\n+161C5 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15F0A: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x161C5: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15F0A: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x161C5: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15EE2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1619D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-15F19 CENTRAL HEADER #21    02014B50 (33639248)\n-15F1D Created Zip Spec      14 (20) '2.0'\n-15F1E Created OS            03 (3) 'Unix'\n-15F1F Extract Zip Spec      0A (10) '1.0'\n-15F20 Extract OS            00 (0) 'MS-DOS'\n-15F21 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15F23 Compression Method    0000 (0) 'Stored'\n-15F25 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15F29 CRC                   00000000 (0)\n-15F2D Compressed Size       00000000 (0)\n-15F31 Uncompressed Size     00000000 (0)\n-15F35 Filename Length       0020 (32)\n-15F37 Extra Length          0000 (0)\n-15F39 Comment Length        0000 (0)\n-15F3B Disk Start            0000 (0)\n-15F3D Int File Attributes   0000 (0)\n+161D4 CENTRAL HEADER #21    02014B50 (33639248)\n+161D8 Created Zip Spec      14 (20) '2.0'\n+161D9 Created OS            03 (3) 'Unix'\n+161DA Extract Zip Spec      0A (10) '1.0'\n+161DB Extract OS            00 (0) 'MS-DOS'\n+161DC General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+161DE Compression Method    0000 (0) 'Stored'\n+161E0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+161E4 CRC                   00000000 (0)\n+161E8 Compressed Size       00000000 (0)\n+161EC Uncompressed Size     00000000 (0)\n+161F0 Filename Length       0020 (32)\n+161F2 Extra Length          0000 (0)\n+161F4 Comment Length        0000 (0)\n+161F6 Disk Start            0000 (0)\n+161F8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15F3F Ext File Attributes   41ED0010 (1106051088)\n+161FA 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-15F43 Local Header Offset   000004D1 (1233)\n-15F47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+161FE Local Header Offset   000004D1 (1233)\n+16202 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15F47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16202: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15F47: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x16202: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15F1F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x161DA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15F67 CENTRAL HEADER #22    02014B50 (33639248)\n-15F6B Created Zip Spec      14 (20) '2.0'\n-15F6C Created OS            03 (3) 'Unix'\n-15F6D Extract Zip Spec      0A (10) '1.0'\n-15F6E Extract OS            00 (0) 'MS-DOS'\n-15F6F General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-15F71 Compression Method    0000 (0) 'Stored'\n-15F73 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15F77 CRC                   00000000 (0)\n-15F7B Compressed Size       00000000 (0)\n-15F7F Uncompressed Size     00000000 (0)\n-15F83 Filename Length       0033 (51)\n-15F85 Extra Length          0000 (0)\n-15F87 Comment Length        0000 (0)\n-15F89 Disk Start            0000 (0)\n-15F8B Int File Attributes   0000 (0)\n+16222 CENTRAL HEADER #22    02014B50 (33639248)\n+16226 Created Zip Spec      14 (20) '2.0'\n+16227 Created OS            03 (3) 'Unix'\n+16228 Extract Zip Spec      0A (10) '1.0'\n+16229 Extract OS            00 (0) 'MS-DOS'\n+1622A General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+1622C Compression Method    0000 (0) 'Stored'\n+1622E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16232 CRC                   00000000 (0)\n+16236 Compressed Size       00000000 (0)\n+1623A Uncompressed Size     00000000 (0)\n+1623E Filename Length       0033 (51)\n+16240 Extra Length          0000 (0)\n+16242 Comment Length        0000 (0)\n+16244 Disk Start            0000 (0)\n+16246 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15F8D Ext File Attributes   41ED0010 (1106051088)\n+16248 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-15F91 Local Header Offset   0000050F (1295)\n-15F95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1624C Local Header Offset   0000050F (1295)\n+16250 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15F95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16250: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x15F95: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x16250: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x15F6D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16228: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-15FC8 CENTRAL HEADER #23    02014B50 (33639248)\n-15FCC Created Zip Spec      14 (20) '2.0'\n-15FCD Created OS            03 (3) 'Unix'\n-15FCE Extract Zip Spec      14 (20) '2.0'\n-15FCF Extract OS            00 (0) 'MS-DOS'\n-15FD0 General Purpose Flag  0800 (2048)\n+16283 CENTRAL HEADER #23    02014B50 (33639248)\n+16287 Created Zip Spec      14 (20) '2.0'\n+16288 Created OS            03 (3) 'Unix'\n+16289 Extract Zip Spec      14 (20) '2.0'\n+1628A Extract OS            00 (0) 'MS-DOS'\n+1628B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15FD2 Compression Method    0008 (8) 'Deflated'\n-15FD4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-15FD8 CRC                   F19B91F6 (4053504502)\n-15FDC Compressed Size       0000032E (814)\n-15FE0 Uncompressed Size     00000CE0 (3296)\n-15FE4 Filename Length       0015 (21)\n-15FE6 Extra Length          0000 (0)\n-15FE8 Comment Length        0000 (0)\n-15FEA Disk Start            0000 (0)\n-15FEC Int File Attributes   0000 (0)\n+1628D Compression Method    0008 (8) 'Deflated'\n+1628F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16293 CRC                   F19B91F6 (4053504502)\n+16297 Compressed Size       0000032E (814)\n+1629B Uncompressed Size     00000CE0 (3296)\n+1629F Filename Length       0015 (21)\n+162A1 Extra Length          0000 (0)\n+162A3 Comment Length        0000 (0)\n+162A5 Disk Start            0000 (0)\n+162A7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-15FEE Ext File Attributes   81A40000 (2175008768)\n+162A9 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-15FF2 Local Header Offset   00000560 (1376)\n-15FF6 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+162AD Local Header Offset   00000560 (1376)\n+162B1 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15FF6: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x162B1: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1600B CENTRAL HEADER #24    02014B50 (33639248)\n-1600F Created Zip Spec      14 (20) '2.0'\n-16010 Created OS            03 (3) 'Unix'\n-16011 Extract Zip Spec      14 (20) '2.0'\n-16012 Extract OS            00 (0) 'MS-DOS'\n-16013 General Purpose Flag  0800 (2048)\n+162C6 CENTRAL HEADER #24    02014B50 (33639248)\n+162CA Created Zip Spec      14 (20) '2.0'\n+162CB Created OS            03 (3) 'Unix'\n+162CC Extract Zip Spec      14 (20) '2.0'\n+162CD Extract OS            00 (0) 'MS-DOS'\n+162CE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16015 Compression Method    0008 (8) 'Deflated'\n-16017 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1601B CRC                   86E2B4B4 (2263004340)\n-1601F Compressed Size       00000F6D (3949)\n-16023 Uncompressed Size     00002C5E (11358)\n-16027 Filename Length       0010 (16)\n-16029 Extra Length          0000 (0)\n-1602B Comment Length        0000 (0)\n-1602D Disk Start            0000 (0)\n-1602F Int File Attributes   0000 (0)\n+162D0 Compression Method    0008 (8) 'Deflated'\n+162D2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+162D6 CRC                   86E2B4B4 (2263004340)\n+162DA Compressed Size       00000F6D (3949)\n+162DE Uncompressed Size     00002C5E (11358)\n+162E2 Filename Length       0010 (16)\n+162E4 Extra Length          0000 (0)\n+162E6 Comment Length        0000 (0)\n+162E8 Disk Start            0000 (0)\n+162EA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16031 Ext File Attributes   81A40000 (2175008768)\n+162EC 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-16035 Local Header Offset   000008C1 (2241)\n-16039 Filename              'XXXXXXXXXXXXXXXX'\n+162F0 Local Header Offset   000008C1 (2241)\n+162F4 Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16039: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x162F4: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16049 CENTRAL HEADER #25    02014B50 (33639248)\n-1604D Created Zip Spec      14 (20) '2.0'\n-1604E Created OS            03 (3) 'Unix'\n-1604F Extract Zip Spec      14 (20) '2.0'\n-16050 Extract OS            00 (0) 'MS-DOS'\n-16051 General Purpose Flag  0800 (2048)\n+16304 CENTRAL HEADER #25    02014B50 (33639248)\n+16308 Created Zip Spec      14 (20) '2.0'\n+16309 Created OS            03 (3) 'Unix'\n+1630A Extract Zip Spec      14 (20) '2.0'\n+1630B Extract OS            00 (0) 'MS-DOS'\n+1630C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16053 Compression Method    0008 (8) 'Deflated'\n-16055 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16059 CRC                   AFC7B46A (2949100650)\n-1605D Compressed Size       0000007F (127)\n-16061 Uncompressed Size     000000AF (175)\n-16065 Filename Length       000F (15)\n-16067 Extra Length          0000 (0)\n-16069 Comment Length        0000 (0)\n-1606B Disk Start            0000 (0)\n-1606D Int File Attributes   0000 (0)\n+1630E Compression Method    0008 (8) 'Deflated'\n+16310 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16314 CRC                   AFC7B46A (2949100650)\n+16318 Compressed Size       0000007F (127)\n+1631C Uncompressed Size     000000AF (175)\n+16320 Filename Length       000F (15)\n+16322 Extra Length          0000 (0)\n+16324 Comment Length        0000 (0)\n+16326 Disk Start            0000 (0)\n+16328 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1606F Ext File Attributes   81A40000 (2175008768)\n+1632A 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-16073 Local Header Offset   0000185C (6236)\n-16077 Filename              'XXXXXXXXXXXXXXX'\n+1632E Local Header Offset   0000185C (6236)\n+16332 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16077: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16332: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16086 CENTRAL HEADER #26    02014B50 (33639248)\n-1608A Created Zip Spec      14 (20) '2.0'\n-1608B Created OS            03 (3) 'Unix'\n-1608C Extract Zip Spec      14 (20) '2.0'\n-1608D Extract OS            00 (0) 'MS-DOS'\n-1608E General Purpose Flag  0800 (2048)\n+16341 CENTRAL HEADER #26    02014B50 (33639248)\n+16345 Created Zip Spec      14 (20) '2.0'\n+16346 Created OS            03 (3) 'Unix'\n+16347 Extract Zip Spec      14 (20) '2.0'\n+16348 Extract OS            00 (0) 'MS-DOS'\n+16349 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16090 Compression Method    0008 (8) 'Deflated'\n-16092 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16096 CRC                   CF6AE7CA (3479889866)\n-1609A Compressed Size       00000369 (873)\n-1609E Uncompressed Size     00000A57 (2647)\n-160A2 Filename Length       003A (58)\n-160A4 Extra Length          0000 (0)\n-160A6 Comment Length        0000 (0)\n-160A8 Disk Start            0000 (0)\n-160AA Int File Attributes   0000 (0)\n+1634B Compression Method    0008 (8) 'Deflated'\n+1634D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16351 CRC                   42A6419F (1118192031)\n+16355 Compressed Size       00000374 (884)\n+16359 Uncompressed Size     00000A8E (2702)\n+1635D Filename Length       003A (58)\n+1635F Extra Length          0000 (0)\n+16361 Comment Length        0000 (0)\n+16363 Disk Start            0000 (0)\n+16365 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-160AC Ext File Attributes   81A40000 (2175008768)\n+16367 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-160B0 Local Header Offset   00001908 (6408)\n-160B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1636B Local Header Offset   00001908 (6408)\n+1636F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x160B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1636F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-160EE CENTRAL HEADER #27    02014B50 (33639248)\n-160F2 Created Zip Spec      14 (20) '2.0'\n-160F3 Created OS            03 (3) 'Unix'\n-160F4 Extract Zip Spec      14 (20) '2.0'\n-160F5 Extract OS            00 (0) 'MS-DOS'\n-160F6 General Purpose Flag  0800 (2048)\n+163A9 CENTRAL HEADER #27    02014B50 (33639248)\n+163AD Created Zip Spec      14 (20) '2.0'\n+163AE Created OS            03 (3) 'Unix'\n+163AF Extract Zip Spec      14 (20) '2.0'\n+163B0 Extract OS            00 (0) 'MS-DOS'\n+163B1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-160F8 Compression Method    0008 (8) 'Deflated'\n-160FA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-160FE CRC                   462DB2DF (1177400031)\n-16102 Compressed Size       00000590 (1424)\n-16106 Uncompressed Size     0000100F (4111)\n-1610A Filename Length       0045 (69)\n-1610C Extra Length          0000 (0)\n-1610E Comment Length        0000 (0)\n-16110 Disk Start            0000 (0)\n-16112 Int File Attributes   0000 (0)\n+163B3 Compression Method    0008 (8) 'Deflated'\n+163B5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+163B9 CRC                   3EF8A330 (1056482096)\n+163BD Compressed Size       0000059B (1435)\n+163C1 Uncompressed Size     00001076 (4214)\n+163C5 Filename Length       0045 (69)\n+163C7 Extra Length          0000 (0)\n+163C9 Comment Length        0000 (0)\n+163CB Disk Start            0000 (0)\n+163CD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16114 Ext File Attributes   81A40000 (2175008768)\n+163CF 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-16118 Local Header Offset   00001CC9 (7369)\n-1611C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+163D3 Local Header Offset   00001CD4 (7380)\n+163D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1611C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x163D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16161 CENTRAL HEADER #28    02014B50 (33639248)\n-16165 Created Zip Spec      14 (20) '2.0'\n-16166 Created OS            03 (3) 'Unix'\n-16167 Extract Zip Spec      14 (20) '2.0'\n-16168 Extract OS            00 (0) 'MS-DOS'\n-16169 General Purpose Flag  0800 (2048)\n+1641C CENTRAL HEADER #28    02014B50 (33639248)\n+16420 Created Zip Spec      14 (20) '2.0'\n+16421 Created OS            03 (3) 'Unix'\n+16422 Extract Zip Spec      14 (20) '2.0'\n+16423 Extract OS            00 (0) 'MS-DOS'\n+16424 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1616B Compression Method    0008 (8) 'Deflated'\n-1616D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16171 CRC                   A8E35A99 (2833472153)\n-16175 Compressed Size       00000271 (625)\n-16179 Uncompressed Size     000004F2 (1266)\n-1617D Filename Length       0032 (50)\n-1617F Extra Length          0000 (0)\n-16181 Comment Length        0000 (0)\n-16183 Disk Start            0000 (0)\n-16185 Int File Attributes   0000 (0)\n+16426 Compression Method    0008 (8) 'Deflated'\n+16428 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1642C CRC                   EEF0F134 (4008767796)\n+16430 Compressed Size       00000276 (630)\n+16434 Uncompressed Size     0000051B (1307)\n+16438 Filename Length       0032 (50)\n+1643A Extra Length          0000 (0)\n+1643C Comment Length        0000 (0)\n+1643E Disk Start            0000 (0)\n+16440 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16187 Ext File Attributes   81A40000 (2175008768)\n+16442 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-1618B Local Header Offset   000022BC (8892)\n-1618F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16446 Local Header Offset   000022D2 (8914)\n+1644A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1618F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1644A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-161C1 CENTRAL HEADER #29    02014B50 (33639248)\n-161C5 Created Zip Spec      14 (20) '2.0'\n-161C6 Created OS            03 (3) 'Unix'\n-161C7 Extract Zip Spec      14 (20) '2.0'\n-161C8 Extract OS            00 (0) 'MS-DOS'\n-161C9 General Purpose Flag  0800 (2048)\n+1647C CENTRAL HEADER #29    02014B50 (33639248)\n+16480 Created Zip Spec      14 (20) '2.0'\n+16481 Created OS            03 (3) 'Unix'\n+16482 Extract Zip Spec      14 (20) '2.0'\n+16483 Extract OS            00 (0) 'MS-DOS'\n+16484 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-161CB Compression Method    0008 (8) 'Deflated'\n-161CD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-161D1 CRC                   ECCEFB44 (3972987716)\n-161D5 Compressed Size       00000210 (528)\n-161D9 Uncompressed Size     00000398 (920)\n-161DD Filename Length       002E (46)\n-161DF Extra Length          0000 (0)\n-161E1 Comment Length        0000 (0)\n-161E3 Disk Start            0000 (0)\n-161E5 Int File Attributes   0000 (0)\n+16486 Compression Method    0008 (8) 'Deflated'\n+16488 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1648C CRC                   1D5DF166 (492695910)\n+16490 Compressed Size       00000217 (535)\n+16494 Uncompressed Size     000003AD (941)\n+16498 Filename Length       002E (46)\n+1649A Extra Length          0000 (0)\n+1649C Comment Length        0000 (0)\n+1649E Disk Start            0000 (0)\n+164A0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-161E7 Ext File Attributes   81A40000 (2175008768)\n+164A2 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-161EB Local Header Offset   0000257D (9597)\n-161EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+164A6 Local Header Offset   00002598 (9624)\n+164AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x161EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x164AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1621D CENTRAL HEADER #30    02014B50 (33639248)\n-16221 Created Zip Spec      14 (20) '2.0'\n-16222 Created OS            03 (3) 'Unix'\n-16223 Extract Zip Spec      14 (20) '2.0'\n-16224 Extract OS            00 (0) 'MS-DOS'\n-16225 General Purpose Flag  0800 (2048)\n+164D8 CENTRAL HEADER #30    02014B50 (33639248)\n+164DC Created Zip Spec      14 (20) '2.0'\n+164DD Created OS            03 (3) 'Unix'\n+164DE Extract Zip Spec      14 (20) '2.0'\n+164DF Extract OS            00 (0) 'MS-DOS'\n+164E0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16227 Compression Method    0008 (8) 'Deflated'\n-16229 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1622D CRC                   7822EF2B (2015555371)\n-16231 Compressed Size       00000299 (665)\n-16235 Uncompressed Size     000004DC (1244)\n-16239 Filename Length       0035 (53)\n-1623B Extra Length          0000 (0)\n-1623D Comment Length        0000 (0)\n-1623F Disk Start            0000 (0)\n-16241 Int File Attributes   0000 (0)\n+164E2 Compression Method    0008 (8) 'Deflated'\n+164E4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+164E8 CRC                   FAB44FD1 (4206120913)\n+164EC Compressed Size       000002A1 (673)\n+164F0 Uncompressed Size     000004FF (1279)\n+164F4 Filename Length       0035 (53)\n+164F6 Extra Length          0000 (0)\n+164F8 Comment Length        0000 (0)\n+164FA Disk Start            0000 (0)\n+164FC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16243 Ext File Attributes   81A40000 (2175008768)\n+164FE 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-16247 Local Header Offset   000027D9 (10201)\n-1624B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16502 Local Header Offset   000027FB (10235)\n+16506 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1624B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16506: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16280 CENTRAL HEADER #31    02014B50 (33639248)\n-16284 Created Zip Spec      14 (20) '2.0'\n-16285 Created OS            03 (3) 'Unix'\n-16286 Extract Zip Spec      14 (20) '2.0'\n-16287 Extract OS            00 (0) 'MS-DOS'\n-16288 General Purpose Flag  0800 (2048)\n+1653B CENTRAL HEADER #31    02014B50 (33639248)\n+1653F Created Zip Spec      14 (20) '2.0'\n+16540 Created OS            03 (3) 'Unix'\n+16541 Extract Zip Spec      14 (20) '2.0'\n+16542 Extract OS            00 (0) 'MS-DOS'\n+16543 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1628A Compression Method    0008 (8) 'Deflated'\n-1628C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16290 CRC                   5CAAFB07 (1554709255)\n-16294 Compressed Size       000002BB (699)\n-16298 Uncompressed Size     0000062F (1583)\n-1629C Filename Length       0030 (48)\n-1629E Extra Length          0000 (0)\n-162A0 Comment Length        0000 (0)\n-162A2 Disk Start            0000 (0)\n-162A4 Int File Attributes   0000 (0)\n+16545 Compression Method    0008 (8) 'Deflated'\n+16547 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1654B CRC                   0D3C7289 (222065289)\n+1654F Compressed Size       000002C3 (707)\n+16553 Uncompressed Size     0000064D (1613)\n+16557 Filename Length       0030 (48)\n+16559 Extra Length          0000 (0)\n+1655B Comment Length        0000 (0)\n+1655D Disk Start            0000 (0)\n+1655F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-162A6 Ext File Attributes   81A40000 (2175008768)\n+16561 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-162AA Local Header Offset   00002AC5 (10949)\n-162AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16565 Local Header Offset   00002AEF (10991)\n+16569 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x162AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16569: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-162DE CENTRAL HEADER #32    02014B50 (33639248)\n-162E2 Created Zip Spec      14 (20) '2.0'\n-162E3 Created OS            03 (3) 'Unix'\n-162E4 Extract Zip Spec      14 (20) '2.0'\n-162E5 Extract OS            00 (0) 'MS-DOS'\n-162E6 General Purpose Flag  0800 (2048)\n+16599 CENTRAL HEADER #32    02014B50 (33639248)\n+1659D Created Zip Spec      14 (20) '2.0'\n+1659E Created OS            03 (3) 'Unix'\n+1659F Extract Zip Spec      14 (20) '2.0'\n+165A0 Extract OS            00 (0) 'MS-DOS'\n+165A1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-162E8 Compression Method    0008 (8) 'Deflated'\n-162EA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-162EE CRC                   4F1688E0 (1326876896)\n-162F2 Compressed Size       00000C78 (3192)\n-162F6 Uncompressed Size     00003A7C (14972)\n-162FA Filename Length       002B (43)\n-162FC Extra Length          0000 (0)\n-162FE Comment Length        0000 (0)\n-16300 Disk Start            0000 (0)\n-16302 Int File Attributes   0000 (0)\n+165A3 Compression Method    0008 (8) 'Deflated'\n+165A5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+165A9 CRC                   9A0F8216 (2584707606)\n+165AD Compressed Size       00000C8C (3212)\n+165B1 Uncompressed Size     00003C3D (15421)\n+165B5 Filename Length       002B (43)\n+165B7 Extra Length          0000 (0)\n+165B9 Comment Length        0000 (0)\n+165BB Disk Start            0000 (0)\n+165BD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16304 Ext File Attributes   81A40000 (2175008768)\n+165BF 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-16308 Local Header Offset   00002DCE (11726)\n-1630C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+165C3 Local Header Offset   00002E00 (11776)\n+165C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1630C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x165C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16337 CENTRAL HEADER #33    02014B50 (33639248)\n-1633B Created Zip Spec      14 (20) '2.0'\n-1633C Created OS            03 (3) 'Unix'\n-1633D Extract Zip Spec      14 (20) '2.0'\n-1633E Extract OS            00 (0) 'MS-DOS'\n-1633F General Purpose Flag  0800 (2048)\n+165F2 CENTRAL HEADER #33    02014B50 (33639248)\n+165F6 Created Zip Spec      14 (20) '2.0'\n+165F7 Created OS            03 (3) 'Unix'\n+165F8 Extract Zip Spec      14 (20) '2.0'\n+165F9 Extract OS            00 (0) 'MS-DOS'\n+165FA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16341 Compression Method    0008 (8) 'Deflated'\n-16343 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16347 CRC                   F33C5BFA (4080819194)\n-1634B Compressed Size       00000270 (624)\n-1634F Uncompressed Size     000004BD (1213)\n-16353 Filename Length       0033 (51)\n-16355 Extra Length          0000 (0)\n-16357 Comment Length        0000 (0)\n-16359 Disk Start            0000 (0)\n-1635B Int File Attributes   0000 (0)\n+165FC Compression Method    0008 (8) 'Deflated'\n+165FE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16602 CRC                   5D4E898D (1565428109)\n+16606 Compressed Size       0000027A (634)\n+1660A Uncompressed Size     000004E2 (1250)\n+1660E Filename Length       0033 (51)\n+16610 Extra Length          0000 (0)\n+16612 Comment Length        0000 (0)\n+16614 Disk Start            0000 (0)\n+16616 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1635D Ext File Attributes   81A40000 (2175008768)\n+16618 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-16361 Local Header Offset   00003A8F (14991)\n-16365 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1661C Local Header Offset   00003AD5 (15061)\n+16620 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16365: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16620: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16398 CENTRAL HEADER #34    02014B50 (33639248)\n-1639C Created Zip Spec      14 (20) '2.0'\n-1639D Created OS            03 (3) 'Unix'\n-1639E Extract Zip Spec      14 (20) '2.0'\n-1639F Extract OS            00 (0) 'MS-DOS'\n-163A0 General Purpose Flag  0800 (2048)\n+16653 CENTRAL HEADER #34    02014B50 (33639248)\n+16657 Created Zip Spec      14 (20) '2.0'\n+16658 Created OS            03 (3) 'Unix'\n+16659 Extract Zip Spec      14 (20) '2.0'\n+1665A Extract OS            00 (0) 'MS-DOS'\n+1665B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-163A2 Compression Method    0008 (8) 'Deflated'\n-163A4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-163A8 CRC                   B27D0F80 (2994540416)\n-163AC Compressed Size       0000091D (2333)\n-163B0 Uncompressed Size     00002A19 (10777)\n-163B4 Filename Length       002E (46)\n-163B6 Extra Length          0000 (0)\n-163B8 Comment Length        0000 (0)\n-163BA Disk Start            0000 (0)\n-163BC Int File Attributes   0000 (0)\n+1665D Compression Method    0008 (8) 'Deflated'\n+1665F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16663 CRC                   2CED0C75 (753732725)\n+16667 Compressed Size       0000092D (2349)\n+1666B Uncompressed Size     00002B2A (11050)\n+1666F Filename Length       002E (46)\n+16671 Extra Length          0000 (0)\n+16673 Comment Length        0000 (0)\n+16675 Disk Start            0000 (0)\n+16677 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-163BE Ext File Attributes   81A40000 (2175008768)\n+16679 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-163C2 Local Header Offset   00003D50 (15696)\n-163C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1667D Local Header Offset   00003DA0 (15776)\n+16681 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x163C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16681: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-163F4 CENTRAL HEADER #35    02014B50 (33639248)\n-163F8 Created Zip Spec      14 (20) '2.0'\n-163F9 Created OS            03 (3) 'Unix'\n-163FA Extract Zip Spec      14 (20) '2.0'\n-163FB Extract OS            00 (0) 'MS-DOS'\n-163FC General Purpose Flag  0800 (2048)\n+166AF CENTRAL HEADER #35    02014B50 (33639248)\n+166B3 Created Zip Spec      14 (20) '2.0'\n+166B4 Created OS            03 (3) 'Unix'\n+166B5 Extract Zip Spec      14 (20) '2.0'\n+166B6 Extract OS            00 (0) 'MS-DOS'\n+166B7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-163FE Compression Method    0008 (8) 'Deflated'\n-16400 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16404 CRC                   2A67D5E8 (711448040)\n-16408 Compressed Size       00000427 (1063)\n-1640C Uncompressed Size     00000C0C (3084)\n-16410 Filename Length       0036 (54)\n-16412 Extra Length          0000 (0)\n-16414 Comment Length        0000 (0)\n-16416 Disk Start            0000 (0)\n-16418 Int File Attributes   0000 (0)\n+166B9 Compression Method    0008 (8) 'Deflated'\n+166BB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+166BF CRC                   C38A081C (3280603164)\n+166C3 Compressed Size       00000432 (1074)\n+166C7 Uncompressed Size     00000C70 (3184)\n+166CB Filename Length       0036 (54)\n+166CD Extra Length          0000 (0)\n+166CF Comment Length        0000 (0)\n+166D1 Disk Start            0000 (0)\n+166D3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1641A Ext File Attributes   81A40000 (2175008768)\n+166D5 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-1641E Local Header Offset   000046B9 (18105)\n-16422 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+166D9 Local Header Offset   00004719 (18201)\n+166DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16422: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x166DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16458 CENTRAL HEADER #36    02014B50 (33639248)\n-1645C Created Zip Spec      14 (20) '2.0'\n-1645D Created OS            03 (3) 'Unix'\n-1645E Extract Zip Spec      14 (20) '2.0'\n-1645F Extract OS            00 (0) 'MS-DOS'\n-16460 General Purpose Flag  0800 (2048)\n+16713 CENTRAL HEADER #36    02014B50 (33639248)\n+16717 Created Zip Spec      14 (20) '2.0'\n+16718 Created OS            03 (3) 'Unix'\n+16719 Extract Zip Spec      14 (20) '2.0'\n+1671A Extract OS            00 (0) 'MS-DOS'\n+1671B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16462 Compression Method    0008 (8) 'Deflated'\n-16464 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16468 CRC                   7483DD2E (1954798894)\n-1646C Compressed Size       00000360 (864)\n-16470 Uncompressed Size     000008BC (2236)\n-16474 Filename Length       0032 (50)\n-16476 Extra Length          0000 (0)\n-16478 Comment Length        0000 (0)\n-1647A Disk Start            0000 (0)\n-1647C Int File Attributes   0000 (0)\n+1671D Compression Method    0008 (8) 'Deflated'\n+1671F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16723 CRC                   5D7F96AB (1568642731)\n+16727 Compressed Size       0000036A (874)\n+1672B Uncompressed Size     00000904 (2308)\n+1672F Filename Length       0032 (50)\n+16731 Extra Length          0000 (0)\n+16733 Comment Length        0000 (0)\n+16735 Disk Start            0000 (0)\n+16737 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1647E Ext File Attributes   81A40000 (2175008768)\n+16739 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-16482 Local Header Offset   00004B34 (19252)\n-16486 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1673D Local Header Offset   00004B9F (19359)\n+16741 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16486: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16741: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-164B8 CENTRAL HEADER #37    02014B50 (33639248)\n-164BC Created Zip Spec      14 (20) '2.0'\n-164BD Created OS            03 (3) 'Unix'\n-164BE Extract Zip Spec      14 (20) '2.0'\n-164BF Extract OS            00 (0) 'MS-DOS'\n-164C0 General Purpose Flag  0800 (2048)\n+16773 CENTRAL HEADER #37    02014B50 (33639248)\n+16777 Created Zip Spec      14 (20) '2.0'\n+16778 Created OS            03 (3) 'Unix'\n+16779 Extract Zip Spec      14 (20) '2.0'\n+1677A Extract OS            00 (0) 'MS-DOS'\n+1677B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-164C2 Compression Method    0008 (8) 'Deflated'\n-164C4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-164C8 CRC                   6B4F2850 (1800349776)\n-164CC Compressed Size       000003C5 (965)\n-164D0 Uncompressed Size     00000801 (2049)\n-164D4 Filename Length       002F (47)\n-164D6 Extra Length          0000 (0)\n-164D8 Comment Length        0000 (0)\n-164DA Disk Start            0000 (0)\n-164DC Int File Attributes   0000 (0)\n+1677D Compression Method    0008 (8) 'Deflated'\n+1677F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16783 CRC                   509BAB75 (1352379253)\n+16787 Compressed Size       000003CF (975)\n+1678B Uncompressed Size     0000083C (2108)\n+1678F Filename Length       002F (47)\n+16791 Extra Length          0000 (0)\n+16793 Comment Length        0000 (0)\n+16795 Disk Start            0000 (0)\n+16797 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-164DE Ext File Attributes   81A40000 (2175008768)\n+16799 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-164E2 Local Header Offset   00004EE4 (20196)\n-164E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1679D Local Header Offset   00004F59 (20313)\n+167A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x164E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x167A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16515 CENTRAL HEADER #38    02014B50 (33639248)\n-16519 Created Zip Spec      14 (20) '2.0'\n-1651A Created OS            03 (3) 'Unix'\n-1651B Extract Zip Spec      14 (20) '2.0'\n-1651C Extract OS            00 (0) 'MS-DOS'\n-1651D General Purpose Flag  0800 (2048)\n+167D0 CENTRAL HEADER #38    02014B50 (33639248)\n+167D4 Created Zip Spec      14 (20) '2.0'\n+167D5 Created OS            03 (3) 'Unix'\n+167D6 Extract Zip Spec      14 (20) '2.0'\n+167D7 Extract OS            00 (0) 'MS-DOS'\n+167D8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1651F Compression Method    0008 (8) 'Deflated'\n-16521 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16525 CRC                   065E383D (106838077)\n-16529 Compressed Size       00000442 (1090)\n-1652D Uncompressed Size     00000B59 (2905)\n-16531 Filename Length       0031 (49)\n-16533 Extra Length          0000 (0)\n-16535 Comment Length        0000 (0)\n-16537 Disk Start            0000 (0)\n-16539 Int File Attributes   0000 (0)\n+167DA Compression Method    0008 (8) 'Deflated'\n+167DC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+167E0 CRC                   C02150D4 (3223408852)\n+167E4 Compressed Size       0000044D (1101)\n+167E8 Uncompressed Size     00000BA1 (2977)\n+167EC Filename Length       0031 (49)\n+167EE Extra Length          0000 (0)\n+167F0 Comment Length        0000 (0)\n+167F2 Disk Start            0000 (0)\n+167F4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1653B Ext File Attributes   81A40000 (2175008768)\n+167F6 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-1653F Local Header Offset   000052F6 (21238)\n-16543 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+167FA Local Header Offset   00005375 (21365)\n+167FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16543: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x167FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16574 CENTRAL HEADER #39    02014B50 (33639248)\n-16578 Created Zip Spec      14 (20) '2.0'\n-16579 Created OS            03 (3) 'Unix'\n-1657A Extract Zip Spec      14 (20) '2.0'\n-1657B Extract OS            00 (0) 'MS-DOS'\n-1657C General Purpose Flag  0800 (2048)\n+1682F CENTRAL HEADER #39    02014B50 (33639248)\n+16833 Created Zip Spec      14 (20) '2.0'\n+16834 Created OS            03 (3) 'Unix'\n+16835 Extract Zip Spec      14 (20) '2.0'\n+16836 Extract OS            00 (0) 'MS-DOS'\n+16837 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1657E Compression Method    0008 (8) 'Deflated'\n-16580 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16584 CRC                   33B4FA9F (867498655)\n-16588 Compressed Size       000003BC (956)\n-1658C Uncompressed Size     00000A57 (2647)\n-16590 Filename Length       0036 (54)\n-16592 Extra Length          0000 (0)\n-16594 Comment Length        0000 (0)\n-16596 Disk Start            0000 (0)\n-16598 Int File Attributes   0000 (0)\n+16839 Compression Method    0008 (8) 'Deflated'\n+1683B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1683F CRC                   B34C7492 (3008132242)\n+16843 Compressed Size       000003C6 (966)\n+16847 Uncompressed Size     00000AAE (2734)\n+1684B Filename Length       0036 (54)\n+1684D Extra Length          0000 (0)\n+1684F Comment Length        0000 (0)\n+16851 Disk Start            0000 (0)\n+16853 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1659A Ext File Attributes   81A40000 (2175008768)\n+16855 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-1659E Local Header Offset   00005787 (22407)\n-165A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16859 Local Header Offset   00005811 (22545)\n+1685D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x165A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1685D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-165D8 CENTRAL HEADER #40    02014B50 (33639248)\n-165DC Created Zip Spec      14 (20) '2.0'\n-165DD Created OS            03 (3) 'Unix'\n-165DE Extract Zip Spec      14 (20) '2.0'\n-165DF Extract OS            00 (0) 'MS-DOS'\n-165E0 General Purpose Flag  0800 (2048)\n+16893 CENTRAL HEADER #40    02014B50 (33639248)\n+16897 Created Zip Spec      14 (20) '2.0'\n+16898 Created OS            03 (3) 'Unix'\n+16899 Extract Zip Spec      14 (20) '2.0'\n+1689A Extract OS            00 (0) 'MS-DOS'\n+1689B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-165E2 Compression Method    0008 (8) 'Deflated'\n-165E4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-165E8 CRC                   99A066B3 (2577426099)\n-165EC Compressed Size       000003F0 (1008)\n-165F0 Uncompressed Size     00000A40 (2624)\n-165F4 Filename Length       0041 (65)\n-165F6 Extra Length          0000 (0)\n-165F8 Comment Length        0000 (0)\n-165FA Disk Start            0000 (0)\n-165FC Int File Attributes   0000 (0)\n+1689D Compression Method    0008 (8) 'Deflated'\n+1689F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+168A3 CRC                   812905CA (2166949322)\n+168A7 Compressed Size       000003FC (1020)\n+168AB Uncompressed Size     00000A8E (2702)\n+168AF Filename Length       0041 (65)\n+168B1 Extra Length          0000 (0)\n+168B3 Comment Length        0000 (0)\n+168B5 Disk Start            0000 (0)\n+168B7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-165FE Ext File Attributes   81A40000 (2175008768)\n+168B9 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-16602 Local Header Offset   00005B97 (23447)\n-16606 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+168BD Local Header Offset   00005C2B (23595)\n+168C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16606: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x168C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16647 CENTRAL HEADER #41    02014B50 (33639248)\n-1664B Created Zip Spec      14 (20) '2.0'\n-1664C Created OS            03 (3) 'Unix'\n-1664D Extract Zip Spec      14 (20) '2.0'\n-1664E Extract OS            00 (0) 'MS-DOS'\n-1664F General Purpose Flag  0800 (2048)\n+16902 CENTRAL HEADER #41    02014B50 (33639248)\n+16906 Created Zip Spec      14 (20) '2.0'\n+16907 Created OS            03 (3) 'Unix'\n+16908 Extract Zip Spec      14 (20) '2.0'\n+16909 Extract OS            00 (0) 'MS-DOS'\n+1690A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16651 Compression Method    0008 (8) 'Deflated'\n-16653 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16657 CRC                   8FC61B83 (2412125059)\n-1665B Compressed Size       000004C9 (1225)\n-1665F Uncompressed Size     00000F15 (3861)\n-16663 Filename Length       0042 (66)\n-16665 Extra Length          0000 (0)\n-16667 Comment Length        0000 (0)\n-16669 Disk Start            0000 (0)\n-1666B Int File Attributes   0000 (0)\n+1690C Compression Method    0008 (8) 'Deflated'\n+1690E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16912 CRC                   D4CAE0D6 (3570065622)\n+16916 Compressed Size       000004D7 (1239)\n+1691A Uncompressed Size     00000F80 (3968)\n+1691E Filename Length       0042 (66)\n+16920 Extra Length          0000 (0)\n+16922 Comment Length        0000 (0)\n+16924 Disk Start            0000 (0)\n+16926 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1666D Ext File Attributes   81A40000 (2175008768)\n+16928 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-16671 Local Header Offset   00005FE6 (24550)\n-16675 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1692C Local Header Offset   00006086 (24710)\n+16930 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16675: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16930: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-166B7 CENTRAL HEADER #42    02014B50 (33639248)\n-166BB Created Zip Spec      14 (20) '2.0'\n-166BC Created OS            03 (3) 'Unix'\n-166BD Extract Zip Spec      14 (20) '2.0'\n-166BE Extract OS            00 (0) 'MS-DOS'\n-166BF General Purpose Flag  0800 (2048)\n+16972 CENTRAL HEADER #42    02014B50 (33639248)\n+16976 Created Zip Spec      14 (20) '2.0'\n+16977 Created OS            03 (3) 'Unix'\n+16978 Extract Zip Spec      14 (20) '2.0'\n+16979 Extract OS            00 (0) 'MS-DOS'\n+1697A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-166C1 Compression Method    0008 (8) 'Deflated'\n-166C3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-166C7 CRC                   C36126A3 (3277924003)\n-166CB Compressed Size       00000499 (1177)\n-166CF Uncompressed Size     00000CF2 (3314)\n-166D3 Filename Length       003F (63)\n-166D5 Extra Length          0000 (0)\n-166D7 Comment Length        0000 (0)\n-166D9 Disk Start            0000 (0)\n-166DB Int File Attributes   0000 (0)\n+1697C Compression Method    0008 (8) 'Deflated'\n+1697E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16982 CRC                   9C44854A (2621736266)\n+16986 Compressed Size       000004A2 (1186)\n+1698A Uncompressed Size     00000D4A (3402)\n+1698E Filename Length       003F (63)\n+16990 Extra Length          0000 (0)\n+16992 Comment Length        0000 (0)\n+16994 Disk Start            0000 (0)\n+16996 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-166DD Ext File Attributes   81A40000 (2175008768)\n+16998 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-166E1 Local Header Offset   0000650F (25871)\n-166E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1699C Local Header Offset   000065BD (26045)\n+169A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x166E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x169A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16724 CENTRAL HEADER #43    02014B50 (33639248)\n-16728 Created Zip Spec      14 (20) '2.0'\n-16729 Created OS            03 (3) 'Unix'\n-1672A Extract Zip Spec      14 (20) '2.0'\n-1672B Extract OS            00 (0) 'MS-DOS'\n-1672C General Purpose Flag  0800 (2048)\n+169DF CENTRAL HEADER #43    02014B50 (33639248)\n+169E3 Created Zip Spec      14 (20) '2.0'\n+169E4 Created OS            03 (3) 'Unix'\n+169E5 Extract Zip Spec      14 (20) '2.0'\n+169E6 Extract OS            00 (0) 'MS-DOS'\n+169E7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1672E Compression Method    0008 (8) 'Deflated'\n-16730 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16734 CRC                   C15189CF (3243346383)\n-16738 Compressed Size       00000317 (791)\n-1673C Uncompressed Size     000006BB (1723)\n-16740 Filename Length       0042 (66)\n-16742 Extra Length          0000 (0)\n-16744 Comment Length        0000 (0)\n-16746 Disk Start            0000 (0)\n-16748 Int File Attributes   0000 (0)\n+169E9 Compression Method    0008 (8) 'Deflated'\n+169EB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+169EF CRC                   F46C8898 (4100753560)\n+169F3 Compressed Size       00000320 (800)\n+169F7 Uncompressed Size     000006EB (1771)\n+169FB Filename Length       0042 (66)\n+169FD Extra Length          0000 (0)\n+169FF Comment Length        0000 (0)\n+16A01 Disk Start            0000 (0)\n+16A03 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1674A Ext File Attributes   81A40000 (2175008768)\n+16A05 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-1674E Local Header Offset   00006A05 (27141)\n-16752 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16A09 Local Header Offset   00006ABC (27324)\n+16A0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16752: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16A0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16794 CENTRAL HEADER #44    02014B50 (33639248)\n-16798 Created Zip Spec      14 (20) '2.0'\n-16799 Created OS            03 (3) 'Unix'\n-1679A Extract Zip Spec      14 (20) '2.0'\n-1679B Extract OS            00 (0) 'MS-DOS'\n-1679C General Purpose Flag  0800 (2048)\n+16A4F CENTRAL HEADER #44    02014B50 (33639248)\n+16A53 Created Zip Spec      14 (20) '2.0'\n+16A54 Created OS            03 (3) 'Unix'\n+16A55 Extract Zip Spec      14 (20) '2.0'\n+16A56 Extract OS            00 (0) 'MS-DOS'\n+16A57 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1679E Compression Method    0008 (8) 'Deflated'\n-167A0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-167A4 CRC                   48345DF3 (1211391475)\n-167A8 Compressed Size       00000433 (1075)\n-167AC Uncompressed Size     00000ACD (2765)\n-167B0 Filename Length       0047 (71)\n-167B2 Extra Length          0000 (0)\n-167B4 Comment Length        0000 (0)\n-167B6 Disk Start            0000 (0)\n-167B8 Int File Attributes   0000 (0)\n+16A59 Compression Method    0008 (8) 'Deflated'\n+16A5B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16A5F CRC                   82A5648F (2191877263)\n+16A63 Compressed Size       0000043B (1083)\n+16A67 Uncompressed Size     00000B13 (2835)\n+16A6B Filename Length       0047 (71)\n+16A6D Extra Length          0000 (0)\n+16A6F Comment Length        0000 (0)\n+16A71 Disk Start            0000 (0)\n+16A73 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-167BA Ext File Attributes   81A40000 (2175008768)\n+16A75 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-167BE Local Header Offset   00006D7C (28028)\n-167C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16A79 Local Header Offset   00006E3C (28220)\n+16A7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x167C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16A7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16809 CENTRAL HEADER #45    02014B50 (33639248)\n-1680D Created Zip Spec      14 (20) '2.0'\n-1680E Created OS            03 (3) 'Unix'\n-1680F Extract Zip Spec      14 (20) '2.0'\n-16810 Extract OS            00 (0) 'MS-DOS'\n-16811 General Purpose Flag  0800 (2048)\n+16AC4 CENTRAL HEADER #45    02014B50 (33639248)\n+16AC8 Created Zip Spec      14 (20) '2.0'\n+16AC9 Created OS            03 (3) 'Unix'\n+16ACA Extract Zip Spec      14 (20) '2.0'\n+16ACB Extract OS            00 (0) 'MS-DOS'\n+16ACC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16813 Compression Method    0008 (8) 'Deflated'\n-16815 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16819 CRC                   8C150447 (2350187591)\n-1681D Compressed Size       000003DB (987)\n-16821 Uncompressed Size     000009B8 (2488)\n-16825 Filename Length       0044 (68)\n-16827 Extra Length          0000 (0)\n-16829 Comment Length        0000 (0)\n-1682B Disk Start            0000 (0)\n-1682D Int File Attributes   0000 (0)\n+16ACE Compression Method    0008 (8) 'Deflated'\n+16AD0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16AD4 CRC                   DA27253B (3659998523)\n+16AD8 Compressed Size       000003E7 (999)\n+16ADC Uncompressed Size     000009FE (2558)\n+16AE0 Filename Length       0044 (68)\n+16AE2 Extra Length          0000 (0)\n+16AE4 Comment Length        0000 (0)\n+16AE6 Disk Start            0000 (0)\n+16AE8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1682F Ext File Attributes   81A40000 (2175008768)\n+16AEA 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-16833 Local Header Offset   00007214 (29204)\n-16837 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16AEE Local Header Offset   000072DC (29404)\n+16AF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16837: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16AF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1687B CENTRAL HEADER #46    02014B50 (33639248)\n-1687F Created Zip Spec      14 (20) '2.0'\n-16880 Created OS            03 (3) 'Unix'\n-16881 Extract Zip Spec      14 (20) '2.0'\n-16882 Extract OS            00 (0) 'MS-DOS'\n-16883 General Purpose Flag  0800 (2048)\n+16B36 CENTRAL HEADER #46    02014B50 (33639248)\n+16B3A Created Zip Spec      14 (20) '2.0'\n+16B3B Created OS            03 (3) 'Unix'\n+16B3C Extract Zip Spec      14 (20) '2.0'\n+16B3D Extract OS            00 (0) 'MS-DOS'\n+16B3E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16885 Compression Method    0008 (8) 'Deflated'\n-16887 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1688B CRC                   288B644A (680223818)\n-1688F Compressed Size       00000391 (913)\n-16893 Uncompressed Size     0000079B (1947)\n-16897 Filename Length       0041 (65)\n-16899 Extra Length          0000 (0)\n-1689B Comment Length        0000 (0)\n-1689D Disk Start            0000 (0)\n-1689F Int File Attributes   0000 (0)\n+16B40 Compression Method    0008 (8) 'Deflated'\n+16B42 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16B46 CRC                   3AE3106C (987959404)\n+16B4A Compressed Size       0000039B (923)\n+16B4E Uncompressed Size     000007D5 (2005)\n+16B52 Filename Length       0041 (65)\n+16B54 Extra Length          0000 (0)\n+16B56 Comment Length        0000 (0)\n+16B58 Disk Start            0000 (0)\n+16B5A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-168A1 Ext File Attributes   81A40000 (2175008768)\n+16B5C 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-168A5 Local Header Offset   00007651 (30289)\n-168A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16B60 Local Header Offset   00007725 (30501)\n+16B64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x168A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16B64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-168EA CENTRAL HEADER #47    02014B50 (33639248)\n-168EE Created Zip Spec      14 (20) '2.0'\n-168EF Created OS            03 (3) 'Unix'\n-168F0 Extract Zip Spec      14 (20) '2.0'\n-168F1 Extract OS            00 (0) 'MS-DOS'\n-168F2 General Purpose Flag  0800 (2048)\n+16BA5 CENTRAL HEADER #47    02014B50 (33639248)\n+16BA9 Created Zip Spec      14 (20) '2.0'\n+16BAA Created OS            03 (3) 'Unix'\n+16BAB Extract Zip Spec      14 (20) '2.0'\n+16BAC Extract OS            00 (0) 'MS-DOS'\n+16BAD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-168F4 Compression Method    0008 (8) 'Deflated'\n-168F6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-168FA CRC                   A6C8F390 (2798187408)\n-168FE Compressed Size       00000491 (1169)\n-16902 Uncompressed Size     00000C41 (3137)\n-16906 Filename Length       0040 (64)\n-16908 Extra Length          0000 (0)\n-1690A Comment Length        0000 (0)\n-1690C Disk Start            0000 (0)\n-1690E Int File Attributes   0000 (0)\n+16BAF Compression Method    0008 (8) 'Deflated'\n+16BB1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16BB5 CRC                   5241C10C (1380040972)\n+16BB9 Compressed Size       0000049D (1181)\n+16BBD Uncompressed Size     00000C91 (3217)\n+16BC1 Filename Length       0040 (64)\n+16BC3 Extra Length          0000 (0)\n+16BC5 Comment Length        0000 (0)\n+16BC7 Disk Start            0000 (0)\n+16BC9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16910 Ext File Attributes   81A40000 (2175008768)\n+16BCB 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-16914 Local Header Offset   00007A41 (31297)\n-16918 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16BCF Local Header Offset   00007B1F (31519)\n+16BD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16918: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16BD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16958 CENTRAL HEADER #48    02014B50 (33639248)\n-1695C Created Zip Spec      14 (20) '2.0'\n-1695D Created OS            03 (3) 'Unix'\n-1695E Extract Zip Spec      14 (20) '2.0'\n-1695F Extract OS            00 (0) 'MS-DOS'\n-16960 General Purpose Flag  0800 (2048)\n+16C13 CENTRAL HEADER #48    02014B50 (33639248)\n+16C17 Created Zip Spec      14 (20) '2.0'\n+16C18 Created OS            03 (3) 'Unix'\n+16C19 Extract Zip Spec      14 (20) '2.0'\n+16C1A Extract OS            00 (0) 'MS-DOS'\n+16C1B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16962 Compression Method    0008 (8) 'Deflated'\n-16964 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16968 CRC                   7350CC44 (1934675012)\n-1696C Compressed Size       000002CA (714)\n-16970 Uncompressed Size     000005A3 (1443)\n-16974 Filename Length       003D (61)\n-16976 Extra Length          0000 (0)\n-16978 Comment Length        0000 (0)\n-1697A Disk Start            0000 (0)\n-1697C Int File Attributes   0000 (0)\n+16C1D Compression Method    0008 (8) 'Deflated'\n+16C1F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16C23 CRC                   30FBCCB4 (821808308)\n+16C27 Compressed Size       000002D4 (724)\n+16C2B Uncompressed Size     000005CD (1485)\n+16C2F Filename Length       003D (61)\n+16C31 Extra Length          0000 (0)\n+16C33 Comment Length        0000 (0)\n+16C35 Disk Start            0000 (0)\n+16C37 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1697E Ext File Attributes   81A40000 (2175008768)\n+16C39 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-16982 Local Header Offset   00007F30 (32560)\n-16986 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16C3D Local Header Offset   0000801A (32794)\n+16C41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16986: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16C41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-169C3 CENTRAL HEADER #49    02014B50 (33639248)\n-169C7 Created Zip Spec      14 (20) '2.0'\n-169C8 Created OS            03 (3) 'Unix'\n-169C9 Extract Zip Spec      14 (20) '2.0'\n-169CA Extract OS            00 (0) 'MS-DOS'\n-169CB General Purpose Flag  0800 (2048)\n+16C7E CENTRAL HEADER #49    02014B50 (33639248)\n+16C82 Created Zip Spec      14 (20) '2.0'\n+16C83 Created OS            03 (3) 'Unix'\n+16C84 Extract Zip Spec      14 (20) '2.0'\n+16C85 Extract OS            00 (0) 'MS-DOS'\n+16C86 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-169CD Compression Method    0008 (8) 'Deflated'\n-169CF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-169D3 CRC                   53726EBB (1400008379)\n-169D7 Compressed Size       000002A5 (677)\n-169DB Uncompressed Size     00000567 (1383)\n-169DF Filename Length       0045 (69)\n-169E1 Extra Length          0000 (0)\n-169E3 Comment Length        0000 (0)\n-169E5 Disk Start            0000 (0)\n-169E7 Int File Attributes   0000 (0)\n+16C88 Compression Method    0008 (8) 'Deflated'\n+16C8A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16C8E CRC                   397FE7C7 (964683719)\n+16C92 Compressed Size       000002AD (685)\n+16C96 Uncompressed Size     00000592 (1426)\n+16C9A Filename Length       0045 (69)\n+16C9C Extra Length          0000 (0)\n+16C9E Comment Length        0000 (0)\n+16CA0 Disk Start            0000 (0)\n+16CA2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-169E9 Ext File Attributes   81A40000 (2175008768)\n+16CA4 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-169ED Local Header Offset   00008255 (33365)\n-169F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16CA8 Local Header Offset   00008349 (33609)\n+16CAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x169F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16CAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16A36 CENTRAL HEADER #50    02014B50 (33639248)\n-16A3A Created Zip Spec      14 (20) '2.0'\n-16A3B Created OS            03 (3) 'Unix'\n-16A3C Extract Zip Spec      14 (20) '2.0'\n-16A3D Extract OS            00 (0) 'MS-DOS'\n-16A3E General Purpose Flag  0800 (2048)\n+16CF1 CENTRAL HEADER #50    02014B50 (33639248)\n+16CF5 Created Zip Spec      14 (20) '2.0'\n+16CF6 Created OS            03 (3) 'Unix'\n+16CF7 Extract Zip Spec      14 (20) '2.0'\n+16CF8 Extract OS            00 (0) 'MS-DOS'\n+16CF9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16A40 Compression Method    0008 (8) 'Deflated'\n-16A42 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16A46 CRC                   C61A5369 (3323614057)\n-16A4A Compressed Size       00000423 (1059)\n-16A4E Uncompressed Size     00000C49 (3145)\n-16A52 Filename Length       0040 (64)\n-16A54 Extra Length          0000 (0)\n-16A56 Comment Length        0000 (0)\n-16A58 Disk Start            0000 (0)\n-16A5A Int File Attributes   0000 (0)\n+16CFB Compression Method    0008 (8) 'Deflated'\n+16CFD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16D01 CRC                   6571F019 (1701965849)\n+16D05 Compressed Size       0000042D (1069)\n+16D09 Uncompressed Size     00000CAD (3245)\n+16D0D Filename Length       0040 (64)\n+16D0F Extra Length          0000 (0)\n+16D11 Comment Length        0000 (0)\n+16D13 Disk Start            0000 (0)\n+16D15 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16A5C Ext File Attributes   81A40000 (2175008768)\n+16D17 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-16A60 Local Header Offset   0000855D (34141)\n-16A64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16D1B Local Header Offset   00008659 (34393)\n+16D1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16A64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16D1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16AA4 CENTRAL HEADER #51    02014B50 (33639248)\n-16AA8 Created Zip Spec      14 (20) '2.0'\n-16AA9 Created OS            03 (3) 'Unix'\n-16AAA Extract Zip Spec      14 (20) '2.0'\n-16AAB Extract OS            00 (0) 'MS-DOS'\n-16AAC General Purpose Flag  0800 (2048)\n+16D5F CENTRAL HEADER #51    02014B50 (33639248)\n+16D63 Created Zip Spec      14 (20) '2.0'\n+16D64 Created OS            03 (3) 'Unix'\n+16D65 Extract Zip Spec      14 (20) '2.0'\n+16D66 Extract OS            00 (0) 'MS-DOS'\n+16D67 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16AAE Compression Method    0008 (8) 'Deflated'\n-16AB0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16AB4 CRC                   4594C88A (1167378570)\n-16AB8 Compressed Size       000003FB (1019)\n-16ABC Uncompressed Size     00000BC7 (3015)\n-16AC0 Filename Length       0041 (65)\n-16AC2 Extra Length          0000 (0)\n-16AC4 Comment Length        0000 (0)\n-16AC6 Disk Start            0000 (0)\n-16AC8 Int File Attributes   0000 (0)\n+16D69 Compression Method    0008 (8) 'Deflated'\n+16D6B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16D6F CRC                   7A468FD9 (2051444697)\n+16D73 Compressed Size       00000402 (1026)\n+16D77 Uncompressed Size     00000C2C (3116)\n+16D7B Filename Length       0041 (65)\n+16D7D Extra Length          0000 (0)\n+16D7F Comment Length        0000 (0)\n+16D81 Disk Start            0000 (0)\n+16D83 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16ACA Ext File Attributes   81A40000 (2175008768)\n+16D85 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-16ACE Local Header Offset   000089DE (35294)\n-16AD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16D89 Local Header Offset   00008AE4 (35556)\n+16D8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16AD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16D8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16B13 CENTRAL HEADER #52    02014B50 (33639248)\n-16B17 Created Zip Spec      14 (20) '2.0'\n-16B18 Created OS            03 (3) 'Unix'\n-16B19 Extract Zip Spec      14 (20) '2.0'\n-16B1A Extract OS            00 (0) 'MS-DOS'\n-16B1B General Purpose Flag  0800 (2048)\n+16DCE CENTRAL HEADER #52    02014B50 (33639248)\n+16DD2 Created Zip Spec      14 (20) '2.0'\n+16DD3 Created OS            03 (3) 'Unix'\n+16DD4 Extract Zip Spec      14 (20) '2.0'\n+16DD5 Extract OS            00 (0) 'MS-DOS'\n+16DD6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16B1D Compression Method    0008 (8) 'Deflated'\n-16B1F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16B23 CRC                   06EFE96C (116386156)\n-16B27 Compressed Size       0000064A (1610)\n-16B2B Uncompressed Size     000014BB (5307)\n-16B2F Filename Length       003E (62)\n-16B31 Extra Length          0000 (0)\n-16B33 Comment Length        0000 (0)\n-16B35 Disk Start            0000 (0)\n-16B37 Int File Attributes   0000 (0)\n+16DD8 Compression Method    0008 (8) 'Deflated'\n+16DDA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16DDE CRC                   FDA6691C (4255541532)\n+16DE2 Compressed Size       00000658 (1624)\n+16DE6 Uncompressed Size     00001578 (5496)\n+16DEA Filename Length       003E (62)\n+16DEC Extra Length          0000 (0)\n+16DEE Comment Length        0000 (0)\n+16DF0 Disk Start            0000 (0)\n+16DF2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16B39 Ext File Attributes   81A40000 (2175008768)\n+16DF4 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-16B3D Local Header Offset   00008E38 (36408)\n-16B41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16DF8 Local Header Offset   00008F45 (36677)\n+16DFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16B41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16DFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16B7F CENTRAL HEADER #53    02014B50 (33639248)\n-16B83 Created Zip Spec      14 (20) '2.0'\n-16B84 Created OS            03 (3) 'Unix'\n-16B85 Extract Zip Spec      14 (20) '2.0'\n-16B86 Extract OS            00 (0) 'MS-DOS'\n-16B87 General Purpose Flag  0800 (2048)\n+16E3A CENTRAL HEADER #53    02014B50 (33639248)\n+16E3E Created Zip Spec      14 (20) '2.0'\n+16E3F Created OS            03 (3) 'Unix'\n+16E40 Extract Zip Spec      14 (20) '2.0'\n+16E41 Extract OS            00 (0) 'MS-DOS'\n+16E42 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16B89 Compression Method    0008 (8) 'Deflated'\n-16B8B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16B8F CRC                   28793399 (679031705)\n-16B93 Compressed Size       00000506 (1286)\n-16B97 Uncompressed Size     00000DA7 (3495)\n-16B9B Filename Length       0039 (57)\n-16B9D Extra Length          0000 (0)\n-16B9F Comment Length        0000 (0)\n-16BA1 Disk Start            0000 (0)\n-16BA3 Int File Attributes   0000 (0)\n+16E44 Compression Method    0008 (8) 'Deflated'\n+16E46 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16E4A CRC                   AD8A2A72 (2911513202)\n+16E4E Compressed Size       00000510 (1296)\n+16E52 Uncompressed Size     00000E16 (3606)\n+16E56 Filename Length       0039 (57)\n+16E58 Extra Length          0000 (0)\n+16E5A Comment Length        0000 (0)\n+16E5C Disk Start            0000 (0)\n+16E5E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16BA5 Ext File Attributes   81A40000 (2175008768)\n+16E60 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-16BA9 Local Header Offset   000094DE (38110)\n-16BAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16E64 Local Header Offset   000095F9 (38393)\n+16E68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16BAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16E68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16BE6 CENTRAL HEADER #54    02014B50 (33639248)\n-16BEA Created Zip Spec      14 (20) '2.0'\n-16BEB Created OS            03 (3) 'Unix'\n-16BEC Extract Zip Spec      14 (20) '2.0'\n-16BED Extract OS            00 (0) 'MS-DOS'\n-16BEE General Purpose Flag  0800 (2048)\n+16EA1 CENTRAL HEADER #54    02014B50 (33639248)\n+16EA5 Created Zip Spec      14 (20) '2.0'\n+16EA6 Created OS            03 (3) 'Unix'\n+16EA7 Extract Zip Spec      14 (20) '2.0'\n+16EA8 Extract OS            00 (0) 'MS-DOS'\n+16EA9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16BF0 Compression Method    0008 (8) 'Deflated'\n-16BF2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16BF6 CRC                   A3334B6D (2738047853)\n-16BFA Compressed Size       00000452 (1106)\n-16BFE Uncompressed Size     00000CE7 (3303)\n-16C02 Filename Length       0046 (70)\n-16C04 Extra Length          0000 (0)\n-16C06 Comment Length        0000 (0)\n-16C08 Disk Start            0000 (0)\n-16C0A Int File Attributes   0000 (0)\n+16EAB Compression Method    0008 (8) 'Deflated'\n+16EAD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16EB1 CRC                   EEF3CE31 (4008955441)\n+16EB5 Compressed Size       0000045E (1118)\n+16EB9 Uncompressed Size     00000D4D (3405)\n+16EBD Filename Length       0046 (70)\n+16EBF Extra Length          0000 (0)\n+16EC1 Comment Length        0000 (0)\n+16EC3 Disk Start            0000 (0)\n+16EC5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16C0C Ext File Attributes   81A40000 (2175008768)\n+16EC7 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-16C10 Local Header Offset   00009A3B (39483)\n-16C14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16ECB Local Header Offset   00009B60 (39776)\n+16ECF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16C14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16ECF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16C5A CENTRAL HEADER #55    02014B50 (33639248)\n-16C5E Created Zip Spec      14 (20) '2.0'\n-16C5F Created OS            03 (3) 'Unix'\n-16C60 Extract Zip Spec      14 (20) '2.0'\n-16C61 Extract OS            00 (0) 'MS-DOS'\n-16C62 General Purpose Flag  0800 (2048)\n+16F15 CENTRAL HEADER #55    02014B50 (33639248)\n+16F19 Created Zip Spec      14 (20) '2.0'\n+16F1A Created OS            03 (3) 'Unix'\n+16F1B Extract Zip Spec      14 (20) '2.0'\n+16F1C Extract OS            00 (0) 'MS-DOS'\n+16F1D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16C64 Compression Method    0008 (8) 'Deflated'\n-16C66 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16C6A CRC                   04A20B3B (77728571)\n-16C6E Compressed Size       000003D3 (979)\n-16C72 Uncompressed Size     00000B66 (2918)\n-16C76 Filename Length       0034 (52)\n-16C78 Extra Length          0000 (0)\n-16C7A Comment Length        0000 (0)\n-16C7C Disk Start            0000 (0)\n-16C7E Int File Attributes   0000 (0)\n+16F1F Compression Method    0008 (8) 'Deflated'\n+16F21 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16F25 CRC                   B359713A (3008983354)\n+16F29 Compressed Size       000003DC (988)\n+16F2D Uncompressed Size     00000BB3 (2995)\n+16F31 Filename Length       0034 (52)\n+16F33 Extra Length          0000 (0)\n+16F35 Comment Length        0000 (0)\n+16F37 Disk Start            0000 (0)\n+16F39 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16C80 Ext File Attributes   81A40000 (2175008768)\n+16F3B 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-16C84 Local Header Offset   00009EF1 (40689)\n-16C88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16F3F Local Header Offset   0000A022 (40994)\n+16F43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16C88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16F43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16CBC CENTRAL HEADER #56    02014B50 (33639248)\n-16CC0 Created Zip Spec      14 (20) '2.0'\n-16CC1 Created OS            03 (3) 'Unix'\n-16CC2 Extract Zip Spec      14 (20) '2.0'\n-16CC3 Extract OS            00 (0) 'MS-DOS'\n-16CC4 General Purpose Flag  0800 (2048)\n+16F77 CENTRAL HEADER #56    02014B50 (33639248)\n+16F7B Created Zip Spec      14 (20) '2.0'\n+16F7C Created OS            03 (3) 'Unix'\n+16F7D Extract Zip Spec      14 (20) '2.0'\n+16F7E Extract OS            00 (0) 'MS-DOS'\n+16F7F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16CC6 Compression Method    0008 (8) 'Deflated'\n-16CC8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16CCC CRC                   60C61EB2 (1623596722)\n-16CD0 Compressed Size       00000253 (595)\n-16CD4 Uncompressed Size     00000460 (1120)\n-16CD8 Filename Length       003B (59)\n-16CDA Extra Length          0000 (0)\n-16CDC Comment Length        0000 (0)\n-16CDE Disk Start            0000 (0)\n-16CE0 Int File Attributes   0000 (0)\n+16F81 Compression Method    0008 (8) 'Deflated'\n+16F83 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16F87 CRC                   D1906BB3 (3515902899)\n+16F8B Compressed Size       0000025D (605)\n+16F8F Uncompressed Size     0000047E (1150)\n+16F93 Filename Length       003B (59)\n+16F95 Extra Length          0000 (0)\n+16F97 Comment Length        0000 (0)\n+16F99 Disk Start            0000 (0)\n+16F9B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16CE2 Ext File Attributes   81A40000 (2175008768)\n+16F9D 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-16CE6 Local Header Offset   0000A316 (41750)\n-16CEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16FA1 Local Header Offset   0000A450 (42064)\n+16FA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16CEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16FA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16D25 CENTRAL HEADER #57    02014B50 (33639248)\n-16D29 Created Zip Spec      14 (20) '2.0'\n-16D2A Created OS            03 (3) 'Unix'\n-16D2B Extract Zip Spec      14 (20) '2.0'\n-16D2C Extract OS            00 (0) 'MS-DOS'\n-16D2D General Purpose Flag  0800 (2048)\n+16FE0 CENTRAL HEADER #57    02014B50 (33639248)\n+16FE4 Created Zip Spec      14 (20) '2.0'\n+16FE5 Created OS            03 (3) 'Unix'\n+16FE6 Extract Zip Spec      14 (20) '2.0'\n+16FE7 Extract OS            00 (0) 'MS-DOS'\n+16FE8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16D2F Compression Method    0008 (8) 'Deflated'\n-16D31 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16D35 CRC                   5AB1BA26 (1521596966)\n-16D39 Compressed Size       00000507 (1287)\n-16D3D Uncompressed Size     00000E0A (3594)\n-16D41 Filename Length       003C (60)\n-16D43 Extra Length          0000 (0)\n-16D45 Comment Length        0000 (0)\n-16D47 Disk Start            0000 (0)\n-16D49 Int File Attributes   0000 (0)\n+16FEA Compression Method    0008 (8) 'Deflated'\n+16FEC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+16FF0 CRC                   0375CF6B (58052459)\n+16FF4 Compressed Size       00000513 (1299)\n+16FF8 Uncompressed Size     00000E60 (3680)\n+16FFC Filename Length       003C (60)\n+16FFE Extra Length          0000 (0)\n+17000 Comment Length        0000 (0)\n+17002 Disk Start            0000 (0)\n+17004 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16D4B Ext File Attributes   81A40000 (2175008768)\n+17006 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-16D4F Local Header Offset   0000A5C2 (42434)\n-16D53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1700A Local Header Offset   0000A706 (42758)\n+1700E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16D53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1700E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16D8F CENTRAL HEADER #58    02014B50 (33639248)\n-16D93 Created Zip Spec      14 (20) '2.0'\n-16D94 Created OS            03 (3) 'Unix'\n-16D95 Extract Zip Spec      14 (20) '2.0'\n-16D96 Extract OS            00 (0) 'MS-DOS'\n-16D97 General Purpose Flag  0800 (2048)\n+1704A CENTRAL HEADER #58    02014B50 (33639248)\n+1704E Created Zip Spec      14 (20) '2.0'\n+1704F Created OS            03 (3) 'Unix'\n+17050 Extract Zip Spec      14 (20) '2.0'\n+17051 Extract OS            00 (0) 'MS-DOS'\n+17052 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16D99 Compression Method    0008 (8) 'Deflated'\n-16D9B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16D9F CRC                   ED364E79 (3979759225)\n-16DA3 Compressed Size       0000038B (907)\n-16DA7 Uncompressed Size     000008DD (2269)\n-16DAB Filename Length       0052 (82)\n-16DAD Extra Length          0000 (0)\n-16DAF Comment Length        0000 (0)\n-16DB1 Disk Start            0000 (0)\n-16DB3 Int File Attributes   0000 (0)\n+17054 Compression Method    0008 (8) 'Deflated'\n+17056 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1705A CRC                   D7F68AC0 (3623258816)\n+1705E Compressed Size       00000395 (917)\n+17062 Uncompressed Size     0000091C (2332)\n+17066 Filename Length       0052 (82)\n+17068 Extra Length          0000 (0)\n+1706A Comment Length        0000 (0)\n+1706C Disk Start            0000 (0)\n+1706E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16DB5 Ext File Attributes   81A40000 (2175008768)\n+17070 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-16DB9 Local Header Offset   0000AB23 (43811)\n-16DBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17074 Local Header Offset   0000AC73 (44147)\n+17078 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16DBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17078: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16E0F CENTRAL HEADER #59    02014B50 (33639248)\n-16E13 Created Zip Spec      14 (20) '2.0'\n-16E14 Created OS            03 (3) 'Unix'\n-16E15 Extract Zip Spec      14 (20) '2.0'\n-16E16 Extract OS            00 (0) 'MS-DOS'\n-16E17 General Purpose Flag  0800 (2048)\n+170CA CENTRAL HEADER #59    02014B50 (33639248)\n+170CE Created Zip Spec      14 (20) '2.0'\n+170CF Created OS            03 (3) 'Unix'\n+170D0 Extract Zip Spec      14 (20) '2.0'\n+170D1 Extract OS            00 (0) 'MS-DOS'\n+170D2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16E19 Compression Method    0008 (8) 'Deflated'\n-16E1B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16E1F CRC                   07379C13 (121084947)\n-16E23 Compressed Size       00000228 (552)\n-16E27 Uncompressed Size     000003D4 (980)\n-16E2B Filename Length       0047 (71)\n-16E2D Extra Length          0000 (0)\n-16E2F Comment Length        0000 (0)\n-16E31 Disk Start            0000 (0)\n-16E33 Int File Attributes   0000 (0)\n+170D4 Compression Method    0008 (8) 'Deflated'\n+170D6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+170DA CRC                   3D7B6838 (1031497784)\n+170DE Compressed Size       0000022F (559)\n+170E2 Uncompressed Size     000003ED (1005)\n+170E6 Filename Length       0047 (71)\n+170E8 Extra Length          0000 (0)\n+170EA Comment Length        0000 (0)\n+170EC Disk Start            0000 (0)\n+170EE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16E35 Ext File Attributes   81A40000 (2175008768)\n+170F0 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-16E39 Local Header Offset   0000AF1E (44830)\n-16E3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+170F4 Local Header Offset   0000B078 (45176)\n+170F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16E3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x170F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16E84 CENTRAL HEADER #60    02014B50 (33639248)\n-16E88 Created Zip Spec      14 (20) '2.0'\n-16E89 Created OS            03 (3) 'Unix'\n-16E8A Extract Zip Spec      14 (20) '2.0'\n-16E8B Extract OS            00 (0) 'MS-DOS'\n-16E8C General Purpose Flag  0800 (2048)\n+1713F CENTRAL HEADER #60    02014B50 (33639248)\n+17143 Created Zip Spec      14 (20) '2.0'\n+17144 Created OS            03 (3) 'Unix'\n+17145 Extract Zip Spec      14 (20) '2.0'\n+17146 Extract OS            00 (0) 'MS-DOS'\n+17147 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16E8E Compression Method    0008 (8) 'Deflated'\n-16E90 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16E94 CRC                   AA1837AB (2853713835)\n-16E98 Compressed Size       00000440 (1088)\n-16E9C Uncompressed Size     00000C62 (3170)\n-16EA0 Filename Length       004E (78)\n-16EA2 Extra Length          0000 (0)\n-16EA4 Comment Length        0000 (0)\n-16EA6 Disk Start            0000 (0)\n-16EA8 Int File Attributes   0000 (0)\n+17149 Compression Method    0008 (8) 'Deflated'\n+1714B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1714F CRC                   475F83BC (1197441980)\n+17153 Compressed Size       0000044A (1098)\n+17157 Uncompressed Size     00000CBA (3258)\n+1715B Filename Length       004E (78)\n+1715D Extra Length          0000 (0)\n+1715F Comment Length        0000 (0)\n+17161 Disk Start            0000 (0)\n+17163 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16EAA Ext File Attributes   81A40000 (2175008768)\n+17165 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-16EAE Local Header Offset   0000B1AB (45483)\n-16EB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17169 Local Header Offset   0000B30C (45836)\n+1716D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16EB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1716D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16F00 CENTRAL HEADER #61    02014B50 (33639248)\n-16F04 Created Zip Spec      14 (20) '2.0'\n-16F05 Created OS            03 (3) 'Unix'\n-16F06 Extract Zip Spec      14 (20) '2.0'\n-16F07 Extract OS            00 (0) 'MS-DOS'\n-16F08 General Purpose Flag  0800 (2048)\n+171BB CENTRAL HEADER #61    02014B50 (33639248)\n+171BF Created Zip Spec      14 (20) '2.0'\n+171C0 Created OS            03 (3) 'Unix'\n+171C1 Extract Zip Spec      14 (20) '2.0'\n+171C2 Extract OS            00 (0) 'MS-DOS'\n+171C3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16F0A Compression Method    0008 (8) 'Deflated'\n-16F0C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16F10 CRC                   C4C68375 (3301344117)\n-16F14 Compressed Size       0000036B (875)\n-16F18 Uncompressed Size     0000081D (2077)\n-16F1C Filename Length       003C (60)\n-16F1E Extra Length          0000 (0)\n-16F20 Comment Length        0000 (0)\n-16F22 Disk Start            0000 (0)\n-16F24 Int File Attributes   0000 (0)\n+171C5 Compression Method    0008 (8) 'Deflated'\n+171C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+171CB CRC                   97BCAA4D (2545723981)\n+171CF Compressed Size       00000375 (885)\n+171D3 Uncompressed Size     0000085B (2139)\n+171D7 Filename Length       003C (60)\n+171D9 Extra Length          0000 (0)\n+171DB Comment Length        0000 (0)\n+171DD Disk Start            0000 (0)\n+171DF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16F26 Ext File Attributes   81A40000 (2175008768)\n+171E1 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-16F2A Local Header Offset   0000B657 (46679)\n-16F2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+171E5 Local Header Offset   0000B7C2 (47042)\n+171E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16F2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x171E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16F6A CENTRAL HEADER #62    02014B50 (33639248)\n-16F6E Created Zip Spec      14 (20) '2.0'\n-16F6F Created OS            03 (3) 'Unix'\n-16F70 Extract Zip Spec      14 (20) '2.0'\n-16F71 Extract OS            00 (0) 'MS-DOS'\n-16F72 General Purpose Flag  0800 (2048)\n+17225 CENTRAL HEADER #62    02014B50 (33639248)\n+17229 Created Zip Spec      14 (20) '2.0'\n+1722A Created OS            03 (3) 'Unix'\n+1722B Extract Zip Spec      14 (20) '2.0'\n+1722C Extract OS            00 (0) 'MS-DOS'\n+1722D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16F74 Compression Method    0008 (8) 'Deflated'\n-16F76 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16F7A CRC                   F9021EF9 (4177665785)\n-16F7E Compressed Size       0000040B (1035)\n-16F82 Uncompressed Size     00000C7A (3194)\n-16F86 Filename Length       0043 (67)\n-16F88 Extra Length          0000 (0)\n-16F8A Comment Length        0000 (0)\n-16F8C Disk Start            0000 (0)\n-16F8E Int File Attributes   0000 (0)\n+1722F Compression Method    0008 (8) 'Deflated'\n+17231 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17235 CRC                   A0F529B3 (2700421555)\n+17239 Compressed Size       00000417 (1047)\n+1723D Uncompressed Size     00000CE3 (3299)\n+17241 Filename Length       0043 (67)\n+17243 Extra Length          0000 (0)\n+17245 Comment Length        0000 (0)\n+17247 Disk Start            0000 (0)\n+17249 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-16F90 Ext File Attributes   81A40000 (2175008768)\n+1724B 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-16F94 Local Header Offset   0000BA1C (47644)\n-16F98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1724F Local Header Offset   0000BB91 (48017)\n+17253 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16F98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17253: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-16FDB CENTRAL HEADER #63    02014B50 (33639248)\n-16FDF Created Zip Spec      14 (20) '2.0'\n-16FE0 Created OS            03 (3) 'Unix'\n-16FE1 Extract Zip Spec      14 (20) '2.0'\n-16FE2 Extract OS            00 (0) 'MS-DOS'\n-16FE3 General Purpose Flag  0800 (2048)\n+17296 CENTRAL HEADER #63    02014B50 (33639248)\n+1729A Created Zip Spec      14 (20) '2.0'\n+1729B Created OS            03 (3) 'Unix'\n+1729C Extract Zip Spec      14 (20) '2.0'\n+1729D Extract OS            00 (0) 'MS-DOS'\n+1729E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16FE5 Compression Method    0008 (8) 'Deflated'\n-16FE7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16FEB CRC                   D8F5C90C (3639986444)\n-16FEF Compressed Size       0000042B (1067)\n-16FF3 Uncompressed Size     00000C3E (3134)\n-16FF7 Filename Length       004A (74)\n-16FF9 Extra Length          0000 (0)\n-16FFB Comment Length        0000 (0)\n-16FFD Disk Start            0000 (0)\n-16FFF Int File Attributes   0000 (0)\n+172A0 Compression Method    0008 (8) 'Deflated'\n+172A2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+172A6 CRC                   0978E7E9 (158918633)\n+172AA Compressed Size       00000433 (1075)\n+172AE Uncompressed Size     00000C93 (3219)\n+172B2 Filename Length       004A (74)\n+172B4 Extra Length          0000 (0)\n+172B6 Comment Length        0000 (0)\n+172B8 Disk Start            0000 (0)\n+172BA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17001 Ext File Attributes   81A40000 (2175008768)\n+172BC 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-17005 Local Header Offset   0000BE88 (48776)\n-17009 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+172C0 Local Header Offset   0000C009 (49161)\n+172C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17009: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x172C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17053 CENTRAL HEADER #64    02014B50 (33639248)\n-17057 Created Zip Spec      14 (20) '2.0'\n-17058 Created OS            03 (3) 'Unix'\n-17059 Extract Zip Spec      14 (20) '2.0'\n-1705A Extract OS            00 (0) 'MS-DOS'\n-1705B General Purpose Flag  0800 (2048)\n+1730E CENTRAL HEADER #64    02014B50 (33639248)\n+17312 Created Zip Spec      14 (20) '2.0'\n+17313 Created OS            03 (3) 'Unix'\n+17314 Extract Zip Spec      14 (20) '2.0'\n+17315 Extract OS            00 (0) 'MS-DOS'\n+17316 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1705D Compression Method    0008 (8) 'Deflated'\n-1705F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17063 CRC                   F7E9DD6B (4159298923)\n-17067 Compressed Size       0000032F (815)\n-1706B Uncompressed Size     00000871 (2161)\n-1706F Filename Length       004D (77)\n-17071 Extra Length          0000 (0)\n-17073 Comment Length        0000 (0)\n-17075 Disk Start            0000 (0)\n-17077 Int File Attributes   0000 (0)\n+17318 Compression Method    0008 (8) 'Deflated'\n+1731A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1731E CRC                   0929F211 (153743889)\n+17322 Compressed Size       00000338 (824)\n+17326 Uncompressed Size     000008B7 (2231)\n+1732A Filename Length       004D (77)\n+1732C Extra Length          0000 (0)\n+1732E Comment Length        0000 (0)\n+17330 Disk Start            0000 (0)\n+17332 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17079 Ext File Attributes   81A40000 (2175008768)\n+17334 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-1707D Local Header Offset   0000C31B (49947)\n-17081 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17338 Local Header Offset   0000C4A4 (50340)\n+1733C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17081: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1733C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-170CE CENTRAL HEADER #65    02014B50 (33639248)\n-170D2 Created Zip Spec      14 (20) '2.0'\n-170D3 Created OS            03 (3) 'Unix'\n-170D4 Extract Zip Spec      14 (20) '2.0'\n-170D5 Extract OS            00 (0) 'MS-DOS'\n-170D6 General Purpose Flag  0800 (2048)\n+17389 CENTRAL HEADER #65    02014B50 (33639248)\n+1738D Created Zip Spec      14 (20) '2.0'\n+1738E Created OS            03 (3) 'Unix'\n+1738F Extract Zip Spec      14 (20) '2.0'\n+17390 Extract OS            00 (0) 'MS-DOS'\n+17391 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-170D8 Compression Method    0008 (8) 'Deflated'\n-170DA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-170DE CRC                   8DD7FA96 (2379741846)\n-170E2 Compressed Size       000011C6 (4550)\n-170E6 Uncompressed Size     00004F7F (20351)\n-170EA Filename Length       0044 (68)\n-170EC Extra Length          0000 (0)\n-170EE Comment Length        0000 (0)\n-170F0 Disk Start            0000 (0)\n-170F2 Int File Attributes   0000 (0)\n+17393 Compression Method    0008 (8) 'Deflated'\n+17395 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17399 CRC                   26D63221 (651571745)\n+1739D Compressed Size       000011DD (4573)\n+173A1 Uncompressed Size     00005153 (20819)\n+173A5 Filename Length       0044 (68)\n+173A7 Extra Length          0000 (0)\n+173A9 Comment Length        0000 (0)\n+173AB Disk Start            0000 (0)\n+173AD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-170F4 Ext File Attributes   81A40000 (2175008768)\n+173AF 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-170F8 Local Header Offset   0000C6B5 (50869)\n-170FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+173B3 Local Header Offset   0000C847 (51271)\n+173B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x170FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x173B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17140 CENTRAL HEADER #66    02014B50 (33639248)\n-17144 Created Zip Spec      14 (20) '2.0'\n-17145 Created OS            03 (3) 'Unix'\n-17146 Extract Zip Spec      14 (20) '2.0'\n-17147 Extract OS            00 (0) 'MS-DOS'\n-17148 General Purpose Flag  0800 (2048)\n+173FB CENTRAL HEADER #66    02014B50 (33639248)\n+173FF Created Zip Spec      14 (20) '2.0'\n+17400 Created OS            03 (3) 'Unix'\n+17401 Extract Zip Spec      14 (20) '2.0'\n+17402 Extract OS            00 (0) 'MS-DOS'\n+17403 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1714A Compression Method    0008 (8) 'Deflated'\n-1714C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17150 CRC                   C31A43AC (3273278380)\n-17154 Compressed Size       00000427 (1063)\n-17158 Uncompressed Size     00000A43 (2627)\n-1715C Filename Length       004B (75)\n-1715E Extra Length          0000 (0)\n-17160 Comment Length        0000 (0)\n-17162 Disk Start            0000 (0)\n-17164 Int File Attributes   0000 (0)\n+17405 Compression Method    0008 (8) 'Deflated'\n+17407 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1740B CRC                   16EA47E7 (384452583)\n+1740F Compressed Size       0000042F (1071)\n+17413 Uncompressed Size     00000A81 (2689)\n+17417 Filename Length       004B (75)\n+17419 Extra Length          0000 (0)\n+1741B Comment Length        0000 (0)\n+1741D Disk Start            0000 (0)\n+1741F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17166 Ext File Attributes   81A40000 (2175008768)\n+17421 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-1716A Local Header Offset   0000D8DD (55517)\n-1716E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17425 Local Header Offset   0000DA86 (55942)\n+17429 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1716E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17429: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-171B9 CENTRAL HEADER #67    02014B50 (33639248)\n-171BD Created Zip Spec      14 (20) '2.0'\n-171BE Created OS            03 (3) 'Unix'\n-171BF Extract Zip Spec      14 (20) '2.0'\n-171C0 Extract OS            00 (0) 'MS-DOS'\n-171C1 General Purpose Flag  0800 (2048)\n+17474 CENTRAL HEADER #67    02014B50 (33639248)\n+17478 Created Zip Spec      14 (20) '2.0'\n+17479 Created OS            03 (3) 'Unix'\n+1747A Extract Zip Spec      14 (20) '2.0'\n+1747B Extract OS            00 (0) 'MS-DOS'\n+1747C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-171C3 Compression Method    0008 (8) 'Deflated'\n-171C5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-171C9 CRC                   4CCC6F49 (1288466249)\n-171CD Compressed Size       0000028B (651)\n-171D1 Uncompressed Size     00000506 (1286)\n-171D5 Filename Length       0037 (55)\n-171D7 Extra Length          0000 (0)\n-171D9 Comment Length        0000 (0)\n-171DB Disk Start            0000 (0)\n-171DD Int File Attributes   0000 (0)\n+1747E Compression Method    0008 (8) 'Deflated'\n+17480 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17484 CRC                   82826623 (2189583907)\n+17488 Compressed Size       00000294 (660)\n+1748C Uncompressed Size     0000052A (1322)\n+17490 Filename Length       0037 (55)\n+17492 Extra Length          0000 (0)\n+17494 Comment Length        0000 (0)\n+17496 Disk Start            0000 (0)\n+17498 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-171DF Ext File Attributes   81A40000 (2175008768)\n+1749A 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-171E3 Local Header Offset   0000DD6D (56685)\n-171E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1749E Local Header Offset   0000DF1E (57118)\n+174A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x171E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x174A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1721E CENTRAL HEADER #68    02014B50 (33639248)\n-17222 Created Zip Spec      14 (20) '2.0'\n-17223 Created OS            03 (3) 'Unix'\n-17224 Extract Zip Spec      14 (20) '2.0'\n-17225 Extract OS            00 (0) 'MS-DOS'\n-17226 General Purpose Flag  0800 (2048)\n+174D9 CENTRAL HEADER #68    02014B50 (33639248)\n+174DD Created Zip Spec      14 (20) '2.0'\n+174DE Created OS            03 (3) 'Unix'\n+174DF Extract Zip Spec      14 (20) '2.0'\n+174E0 Extract OS            00 (0) 'MS-DOS'\n+174E1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17228 Compression Method    0008 (8) 'Deflated'\n-1722A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1722E CRC                   B342E8EC (3007506668)\n-17232 Compressed Size       0000036C (876)\n-17236 Uncompressed Size     0000096F (2415)\n-1723A Filename Length       004D (77)\n-1723C Extra Length          0000 (0)\n-1723E Comment Length        0000 (0)\n-17240 Disk Start            0000 (0)\n-17242 Int File Attributes   0000 (0)\n+174E3 Compression Method    0008 (8) 'Deflated'\n+174E5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+174E9 CRC                   25BB24C3 (633021635)\n+174ED Compressed Size       00000375 (885)\n+174F1 Uncompressed Size     000009A2 (2466)\n+174F5 Filename Length       004D (77)\n+174F7 Extra Length          0000 (0)\n+174F9 Comment Length        0000 (0)\n+174FB Disk Start            0000 (0)\n+174FD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17244 Ext File Attributes   81A40000 (2175008768)\n+174FF 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-17248 Local Header Offset   0000E04D (57421)\n-1724C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17503 Local Header Offset   0000E207 (57863)\n+17507 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1724C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17507: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17299 CENTRAL HEADER #69    02014B50 (33639248)\n-1729D Created Zip Spec      14 (20) '2.0'\n-1729E Created OS            03 (3) 'Unix'\n-1729F Extract Zip Spec      14 (20) '2.0'\n-172A0 Extract OS            00 (0) 'MS-DOS'\n-172A1 General Purpose Flag  0800 (2048)\n+17554 CENTRAL HEADER #69    02014B50 (33639248)\n+17558 Created Zip Spec      14 (20) '2.0'\n+17559 Created OS            03 (3) 'Unix'\n+1755A Extract Zip Spec      14 (20) '2.0'\n+1755B Extract OS            00 (0) 'MS-DOS'\n+1755C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-172A3 Compression Method    0008 (8) 'Deflated'\n-172A5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-172A9 CRC                   CAD52129 (3402965289)\n-172AD Compressed Size       00000C83 (3203)\n-172B1 Uncompressed Size     00003D87 (15751)\n-172B5 Filename Length       0047 (71)\n-172B7 Extra Length          0000 (0)\n-172B9 Comment Length        0000 (0)\n-172BB Disk Start            0000 (0)\n-172BD Int File Attributes   0000 (0)\n+1755E Compression Method    0008 (8) 'Deflated'\n+17560 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17564 CRC                   9322DFB2 (2468536242)\n+17568 Compressed Size       00000C99 (3225)\n+1756C Uncompressed Size     00003EDE (16094)\n+17570 Filename Length       0047 (71)\n+17572 Extra Length          0000 (0)\n+17574 Comment Length        0000 (0)\n+17576 Disk Start            0000 (0)\n+17578 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-172BF Ext File Attributes   81A40000 (2175008768)\n+1757A 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-172C3 Local Header Offset   0000E424 (58404)\n-172C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1757E Local Header Offset   0000E5E7 (58855)\n+17582 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x172C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17582: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1730E CENTRAL HEADER #70    02014B50 (33639248)\n-17312 Created Zip Spec      14 (20) '2.0'\n-17313 Created OS            03 (3) 'Unix'\n-17314 Extract Zip Spec      14 (20) '2.0'\n-17315 Extract OS            00 (0) 'MS-DOS'\n-17316 General Purpose Flag  0800 (2048)\n+175C9 CENTRAL HEADER #70    02014B50 (33639248)\n+175CD Created Zip Spec      14 (20) '2.0'\n+175CE Created OS            03 (3) 'Unix'\n+175CF Extract Zip Spec      14 (20) '2.0'\n+175D0 Extract OS            00 (0) 'MS-DOS'\n+175D1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17318 Compression Method    0008 (8) 'Deflated'\n-1731A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1731E CRC                   47F26503 (1207067907)\n-17322 Compressed Size       000003FA (1018)\n-17326 Uncompressed Size     000009C5 (2501)\n-1732A Filename Length       0045 (69)\n-1732C Extra Length          0000 (0)\n-1732E Comment Length        0000 (0)\n-17330 Disk Start            0000 (0)\n-17332 Int File Attributes   0000 (0)\n+175D3 Compression Method    0008 (8) 'Deflated'\n+175D5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+175D9 CRC                   EE2E13F4 (3995997172)\n+175DD Compressed Size       00000405 (1029)\n+175E1 Uncompressed Size     00000A07 (2567)\n+175E5 Filename Length       0045 (69)\n+175E7 Extra Length          0000 (0)\n+175E9 Comment Length        0000 (0)\n+175EB Disk Start            0000 (0)\n+175ED Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17334 Ext File Attributes   81A40000 (2175008768)\n+175EF 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-17338 Local Header Offset   0000F10C (61708)\n-1733C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+175F3 Local Header Offset   0000F2E5 (62181)\n+175F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1733C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x175F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17381 CENTRAL HEADER #71    02014B50 (33639248)\n-17385 Created Zip Spec      14 (20) '2.0'\n-17386 Created OS            03 (3) 'Unix'\n-17387 Extract Zip Spec      14 (20) '2.0'\n-17388 Extract OS            00 (0) 'MS-DOS'\n-17389 General Purpose Flag  0800 (2048)\n+1763C CENTRAL HEADER #71    02014B50 (33639248)\n+17640 Created Zip Spec      14 (20) '2.0'\n+17641 Created OS            03 (3) 'Unix'\n+17642 Extract Zip Spec      14 (20) '2.0'\n+17643 Extract OS            00 (0) 'MS-DOS'\n+17644 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1738B Compression Method    0008 (8) 'Deflated'\n-1738D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17391 CRC                   19F0D91C (435214620)\n-17395 Compressed Size       000004A1 (1185)\n-17399 Uncompressed Size     00000D07 (3335)\n-1739D Filename Length       0046 (70)\n-1739F Extra Length          0000 (0)\n-173A1 Comment Length        0000 (0)\n-173A3 Disk Start            0000 (0)\n-173A5 Int File Attributes   0000 (0)\n+17646 Compression Method    0008 (8) 'Deflated'\n+17648 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1764C CRC                   9044A5F3 (2420418035)\n+17650 Compressed Size       000004AB (1195)\n+17654 Uncompressed Size     00000D59 (3417)\n+17658 Filename Length       0046 (70)\n+1765A Extra Length          0000 (0)\n+1765C Comment Length        0000 (0)\n+1765E Disk Start            0000 (0)\n+17660 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-173A7 Ext File Attributes   81A40000 (2175008768)\n+17662 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-173AB Local Header Offset   0000F569 (62825)\n-173AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17666 Local Header Offset   0000F74D (63309)\n+1766A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x173AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1766A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-173F5 CENTRAL HEADER #72    02014B50 (33639248)\n-173F9 Created Zip Spec      14 (20) '2.0'\n-173FA Created OS            03 (3) 'Unix'\n-173FB Extract Zip Spec      14 (20) '2.0'\n-173FC Extract OS            00 (0) 'MS-DOS'\n-173FD General Purpose Flag  0800 (2048)\n+176B0 CENTRAL HEADER #72    02014B50 (33639248)\n+176B4 Created Zip Spec      14 (20) '2.0'\n+176B5 Created OS            03 (3) 'Unix'\n+176B6 Extract Zip Spec      14 (20) '2.0'\n+176B7 Extract OS            00 (0) 'MS-DOS'\n+176B8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-173FF Compression Method    0008 (8) 'Deflated'\n-17401 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17405 CRC                   7E8AFFB4 (2123038644)\n-17409 Compressed Size       000002FC (764)\n-1740D Uncompressed Size     000007C3 (1987)\n-17411 Filename Length       0046 (70)\n-17413 Extra Length          0000 (0)\n-17415 Comment Length        0000 (0)\n-17417 Disk Start            0000 (0)\n-17419 Int File Attributes   0000 (0)\n+176BA Compression Method    0008 (8) 'Deflated'\n+176BC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+176C0 CRC                   15CC2E88 (365702792)\n+176C4 Compressed Size       00000305 (773)\n+176C8 Uncompressed Size     000007FE (2046)\n+176CC Filename Length       0046 (70)\n+176CE Extra Length          0000 (0)\n+176D0 Comment Length        0000 (0)\n+176D2 Disk Start            0000 (0)\n+176D4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1741B Ext File Attributes   81A40000 (2175008768)\n+176D6 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-1741F Local Header Offset   0000FA6E (64110)\n-17423 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+176DA Local Header Offset   0000FC5C (64604)\n+176DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17423: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x176DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17469 CENTRAL HEADER #73    02014B50 (33639248)\n-1746D Created Zip Spec      14 (20) '2.0'\n-1746E Created OS            03 (3) 'Unix'\n-1746F Extract Zip Spec      14 (20) '2.0'\n-17470 Extract OS            00 (0) 'MS-DOS'\n-17471 General Purpose Flag  0800 (2048)\n+17724 CENTRAL HEADER #73    02014B50 (33639248)\n+17728 Created Zip Spec      14 (20) '2.0'\n+17729 Created OS            03 (3) 'Unix'\n+1772A Extract Zip Spec      14 (20) '2.0'\n+1772B Extract OS            00 (0) 'MS-DOS'\n+1772C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17473 Compression Method    0008 (8) 'Deflated'\n-17475 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17479 CRC                   BE623F70 (3194109808)\n-1747D Compressed Size       000007A0 (1952)\n-17481 Uncompressed Size     00001B70 (7024)\n-17485 Filename Length       0033 (51)\n-17487 Extra Length          0000 (0)\n-17489 Comment Length        0000 (0)\n-1748B Disk Start            0000 (0)\n-1748D Int File Attributes   0000 (0)\n+1772E Compression Method    0008 (8) 'Deflated'\n+17730 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17734 CRC                   A00D3EBD (2685222589)\n+17738 Compressed Size       000007B4 (1972)\n+1773C Uncompressed Size     00001C52 (7250)\n+17740 Filename Length       0033 (51)\n+17742 Extra Length          0000 (0)\n+17744 Comment Length        0000 (0)\n+17746 Disk Start            0000 (0)\n+17748 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1748F Ext File Attributes   81A40000 (2175008768)\n+1774A 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-17493 Local Header Offset   0000FDCE (64974)\n-17497 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1774E Local Header Offset   0000FFC5 (65477)\n+17752 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17497: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17752: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-174CA CENTRAL HEADER #74    02014B50 (33639248)\n-174CE Created Zip Spec      14 (20) '2.0'\n-174CF Created OS            03 (3) 'Unix'\n-174D0 Extract Zip Spec      14 (20) '2.0'\n-174D1 Extract OS            00 (0) 'MS-DOS'\n-174D2 General Purpose Flag  0800 (2048)\n+17785 CENTRAL HEADER #74    02014B50 (33639248)\n+17789 Created Zip Spec      14 (20) '2.0'\n+1778A Created OS            03 (3) 'Unix'\n+1778B Extract Zip Spec      14 (20) '2.0'\n+1778C Extract OS            00 (0) 'MS-DOS'\n+1778D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-174D4 Compression Method    0008 (8) 'Deflated'\n-174D6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-174DA CRC                   C31D4A4B (3273476683)\n-174DE Compressed Size       000004E7 (1255)\n-174E2 Uncompressed Size     0000120B (4619)\n-174E6 Filename Length       0039 (57)\n-174E8 Extra Length          0000 (0)\n-174EA Comment Length        0000 (0)\n-174EC Disk Start            0000 (0)\n-174EE Int File Attributes   0000 (0)\n+1778F Compression Method    0008 (8) 'Deflated'\n+17791 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17795 CRC                   69F2CD2A (1777519914)\n+17799 Compressed Size       000004F3 (1267)\n+1779D Uncompressed Size     0000129C (4764)\n+177A1 Filename Length       0039 (57)\n+177A3 Extra Length          0000 (0)\n+177A5 Comment Length        0000 (0)\n+177A7 Disk Start            0000 (0)\n+177A9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-174F0 Ext File Attributes   81A40000 (2175008768)\n+177AB 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-174F4 Local Header Offset   000105BF (67007)\n-174F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+177AF Local Header Offset   000107CA (67530)\n+177B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x174F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x177B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17531 CENTRAL HEADER #75    02014B50 (33639248)\n-17535 Created Zip Spec      14 (20) '2.0'\n-17536 Created OS            03 (3) 'Unix'\n-17537 Extract Zip Spec      14 (20) '2.0'\n-17538 Extract OS            00 (0) 'MS-DOS'\n-17539 General Purpose Flag  0800 (2048)\n+177EC CENTRAL HEADER #75    02014B50 (33639248)\n+177F0 Created Zip Spec      14 (20) '2.0'\n+177F1 Created OS            03 (3) 'Unix'\n+177F2 Extract Zip Spec      14 (20) '2.0'\n+177F3 Extract OS            00 (0) 'MS-DOS'\n+177F4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1753B Compression Method    0008 (8) 'Deflated'\n-1753D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17541 CRC                   B4E1FAB5 (3034708661)\n-17545 Compressed Size       000006A7 (1703)\n-17549 Uncompressed Size     0000180E (6158)\n-1754D Filename Length       0036 (54)\n-1754F Extra Length          0000 (0)\n-17551 Comment Length        0000 (0)\n-17553 Disk Start            0000 (0)\n-17555 Int File Attributes   0000 (0)\n+177F6 Compression Method    0008 (8) 'Deflated'\n+177F8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+177FC CRC                   3A871853 (981932115)\n+17800 Compressed Size       000006B8 (1720)\n+17804 Uncompressed Size     000018D5 (6357)\n+17808 Filename Length       0036 (54)\n+1780A Extra Length          0000 (0)\n+1780C Comment Length        0000 (0)\n+1780E Disk Start            0000 (0)\n+17810 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17557 Ext File Attributes   81A40000 (2175008768)\n+17812 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-1755B Local Header Offset   00010AFD (68349)\n-1755F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17816 Local Header Offset   00010D14 (68884)\n+1781A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1755F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1781A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17595 CENTRAL HEADER #76    02014B50 (33639248)\n-17599 Created Zip Spec      14 (20) '2.0'\n-1759A Created OS            03 (3) 'Unix'\n-1759B Extract Zip Spec      14 (20) '2.0'\n-1759C Extract OS            00 (0) 'MS-DOS'\n-1759D General Purpose Flag  0800 (2048)\n+17850 CENTRAL HEADER #76    02014B50 (33639248)\n+17854 Created Zip Spec      14 (20) '2.0'\n+17855 Created OS            03 (3) 'Unix'\n+17856 Extract Zip Spec      14 (20) '2.0'\n+17857 Extract OS            00 (0) 'MS-DOS'\n+17858 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1759F Compression Method    0008 (8) 'Deflated'\n-175A1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-175A5 CRC                   5668569D (1449678493)\n-175A9 Compressed Size       00000468 (1128)\n-175AD Uncompressed Size     00000C7B (3195)\n-175B1 Filename Length       0037 (55)\n-175B3 Extra Length          0000 (0)\n-175B5 Comment Length        0000 (0)\n-175B7 Disk Start            0000 (0)\n-175B9 Int File Attributes   0000 (0)\n+1785A Compression Method    0008 (8) 'Deflated'\n+1785C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17860 CRC                   7BC9467A (2076788346)\n+17864 Compressed Size       00000473 (1139)\n+17868 Uncompressed Size     00000CE6 (3302)\n+1786C Filename Length       0037 (55)\n+1786E Extra Length          0000 (0)\n+17870 Comment Length        0000 (0)\n+17872 Disk Start            0000 (0)\n+17874 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-175BB Ext File Attributes   81A40000 (2175008768)\n+17876 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-175BF Local Header Offset   000111F8 (70136)\n-175C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1787A Local Header Offset   00011420 (70688)\n+1787E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x175C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1787E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-175FA CENTRAL HEADER #77    02014B50 (33639248)\n-175FE Created Zip Spec      14 (20) '2.0'\n-175FF Created OS            03 (3) 'Unix'\n-17600 Extract Zip Spec      14 (20) '2.0'\n-17601 Extract OS            00 (0) 'MS-DOS'\n-17602 General Purpose Flag  0800 (2048)\n+178B5 CENTRAL HEADER #77    02014B50 (33639248)\n+178B9 Created Zip Spec      14 (20) '2.0'\n+178BA Created OS            03 (3) 'Unix'\n+178BB Extract Zip Spec      14 (20) '2.0'\n+178BC Extract OS            00 (0) 'MS-DOS'\n+178BD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17604 Compression Method    0008 (8) 'Deflated'\n-17606 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1760A CRC                   EA525DAF (3931266479)\n-1760E Compressed Size       00000284 (644)\n-17612 Uncompressed Size     000004C1 (1217)\n-17616 Filename Length       003D (61)\n-17618 Extra Length          0000 (0)\n-1761A Comment Length        0000 (0)\n-1761C Disk Start            0000 (0)\n-1761E Int File Attributes   0000 (0)\n+178BF Compression Method    0008 (8) 'Deflated'\n+178C1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+178C5 CRC                   8442F5C1 (2218980801)\n+178C9 Compressed Size       0000028D (653)\n+178CD Uncompressed Size     000004E8 (1256)\n+178D1 Filename Length       003D (61)\n+178D3 Extra Length          0000 (0)\n+178D5 Comment Length        0000 (0)\n+178D7 Disk Start            0000 (0)\n+178D9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17620 Ext File Attributes   81A40000 (2175008768)\n+178DB 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-17624 Local Header Offset   000116B5 (71349)\n-17628 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+178DF Local Header Offset   000118E8 (71912)\n+178E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17628: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x178E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17665 CENTRAL HEADER #78    02014B50 (33639248)\n-17669 Created Zip Spec      14 (20) '2.0'\n-1766A Created OS            03 (3) 'Unix'\n-1766B Extract Zip Spec      14 (20) '2.0'\n-1766C Extract OS            00 (0) 'MS-DOS'\n-1766D General Purpose Flag  0800 (2048)\n+17920 CENTRAL HEADER #78    02014B50 (33639248)\n+17924 Created Zip Spec      14 (20) '2.0'\n+17925 Created OS            03 (3) 'Unix'\n+17926 Extract Zip Spec      14 (20) '2.0'\n+17927 Extract OS            00 (0) 'MS-DOS'\n+17928 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1766F Compression Method    0008 (8) 'Deflated'\n-17671 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17675 CRC                   6E98A8DB (1855498459)\n-17679 Compressed Size       000002B8 (696)\n-1767D Uncompressed Size     0000063C (1596)\n-17681 Filename Length       003F (63)\n-17683 Extra Length          0000 (0)\n-17685 Comment Length        0000 (0)\n-17687 Disk Start            0000 (0)\n-17689 Int File Attributes   0000 (0)\n+1792A Compression Method    0008 (8) 'Deflated'\n+1792C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17930 CRC                   1B483D0F (457719055)\n+17934 Compressed Size       000002C0 (704)\n+17938 Uncompressed Size     00000667 (1639)\n+1793C Filename Length       003F (63)\n+1793E Extra Length          0000 (0)\n+17940 Comment Length        0000 (0)\n+17942 Disk Start            0000 (0)\n+17944 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1768B Ext File Attributes   81A40000 (2175008768)\n+17946 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-1768F Local Header Offset   00011994 (72084)\n-17693 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1794A Local Header Offset   00011BD0 (72656)\n+1794E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17693: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1794E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-176D2 CENTRAL HEADER #79    02014B50 (33639248)\n-176D6 Created Zip Spec      14 (20) '2.0'\n-176D7 Created OS            03 (3) 'Unix'\n-176D8 Extract Zip Spec      14 (20) '2.0'\n-176D9 Extract OS            00 (0) 'MS-DOS'\n-176DA General Purpose Flag  0800 (2048)\n+1798D CENTRAL HEADER #79    02014B50 (33639248)\n+17991 Created Zip Spec      14 (20) '2.0'\n+17992 Created OS            03 (3) 'Unix'\n+17993 Extract Zip Spec      14 (20) '2.0'\n+17994 Extract OS            00 (0) 'MS-DOS'\n+17995 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-176DC Compression Method    0008 (8) 'Deflated'\n-176DE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-176E2 CRC                   96165FE8 (2518048744)\n-176E6 Compressed Size       00000459 (1113)\n-176EA Uncompressed Size     00000B47 (2887)\n-176EE Filename Length       0048 (72)\n-176F0 Extra Length          0000 (0)\n-176F2 Comment Length        0000 (0)\n-176F4 Disk Start            0000 (0)\n-176F6 Int File Attributes   0000 (0)\n+17997 Compression Method    0008 (8) 'Deflated'\n+17999 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1799D CRC                   B81EA5D5 (3089016277)\n+179A1 Compressed Size       00000466 (1126)\n+179A5 Uncompressed Size     00000B91 (2961)\n+179A9 Filename Length       0048 (72)\n+179AB Extra Length          0000 (0)\n+179AD Comment Length        0000 (0)\n+179AF Disk Start            0000 (0)\n+179B1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-176F8 Ext File Attributes   81A40000 (2175008768)\n+179B3 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-176FC Local Header Offset   00011CA9 (72873)\n-17700 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+179B7 Local Header Offset   00011EED (73453)\n+179BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17700: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x179BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17748 CENTRAL HEADER #80    02014B50 (33639248)\n-1774C Created Zip Spec      14 (20) '2.0'\n-1774D Created OS            03 (3) 'Unix'\n-1774E Extract Zip Spec      14 (20) '2.0'\n-1774F Extract OS            00 (0) 'MS-DOS'\n-17750 General Purpose Flag  0800 (2048)\n+17A03 CENTRAL HEADER #80    02014B50 (33639248)\n+17A07 Created Zip Spec      14 (20) '2.0'\n+17A08 Created OS            03 (3) 'Unix'\n+17A09 Extract Zip Spec      14 (20) '2.0'\n+17A0A Extract OS            00 (0) 'MS-DOS'\n+17A0B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17752 Compression Method    0008 (8) 'Deflated'\n-17754 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17758 CRC                   BB15446F (3138733167)\n-1775C Compressed Size       000002B3 (691)\n-17760 Uncompressed Size     00000540 (1344)\n-17764 Filename Length       0045 (69)\n-17766 Extra Length          0000 (0)\n-17768 Comment Length        0000 (0)\n-1776A Disk Start            0000 (0)\n-1776C Int File Attributes   0000 (0)\n+17A0D Compression Method    0008 (8) 'Deflated'\n+17A0F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17A13 CRC                   EF780E16 (4017622550)\n+17A17 Compressed Size       000002BD (701)\n+17A1B Uncompressed Size     00000562 (1378)\n+17A1F Filename Length       0045 (69)\n+17A21 Extra Length          0000 (0)\n+17A23 Comment Length        0000 (0)\n+17A25 Disk Start            0000 (0)\n+17A27 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1776E Ext File Attributes   81A40000 (2175008768)\n+17A29 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-17772 Local Header Offset   00012168 (74088)\n-17776 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17A2D Local Header Offset   000123B9 (74681)\n+17A31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17776: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17A31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-177BB CENTRAL HEADER #81    02014B50 (33639248)\n-177BF Created Zip Spec      14 (20) '2.0'\n-177C0 Created OS            03 (3) 'Unix'\n-177C1 Extract Zip Spec      14 (20) '2.0'\n-177C2 Extract OS            00 (0) 'MS-DOS'\n-177C3 General Purpose Flag  0800 (2048)\n+17A76 CENTRAL HEADER #81    02014B50 (33639248)\n+17A7A Created Zip Spec      14 (20) '2.0'\n+17A7B Created OS            03 (3) 'Unix'\n+17A7C Extract Zip Spec      14 (20) '2.0'\n+17A7D Extract OS            00 (0) 'MS-DOS'\n+17A7E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-177C5 Compression Method    0008 (8) 'Deflated'\n-177C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-177CB CRC                   C656CCE4 (3327577316)\n-177CF Compressed Size       00000388 (904)\n-177D3 Uncompressed Size     00000872 (2162)\n-177D7 Filename Length       0047 (71)\n-177D9 Extra Length          0000 (0)\n-177DB Comment Length        0000 (0)\n-177DD Disk Start            0000 (0)\n-177DF Int File Attributes   0000 (0)\n+17A80 Compression Method    0008 (8) 'Deflated'\n+17A82 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17A86 CRC                   CC678E8E (3429338766)\n+17A8A Compressed Size       00000391 (913)\n+17A8E Uncompressed Size     000008A3 (2211)\n+17A92 Filename Length       0047 (71)\n+17A94 Extra Length          0000 (0)\n+17A96 Comment Length        0000 (0)\n+17A98 Disk Start            0000 (0)\n+17A9A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-177E1 Ext File Attributes   81A40000 (2175008768)\n+17A9C 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-177E5 Local Header Offset   0001247E (74878)\n-177E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17AA0 Local Header Offset   000126D9 (75481)\n+17AA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x177E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17AA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17830 CENTRAL HEADER #82    02014B50 (33639248)\n-17834 Created Zip Spec      14 (20) '2.0'\n-17835 Created OS            03 (3) 'Unix'\n-17836 Extract Zip Spec      14 (20) '2.0'\n-17837 Extract OS            00 (0) 'MS-DOS'\n-17838 General Purpose Flag  0800 (2048)\n+17AEB CENTRAL HEADER #82    02014B50 (33639248)\n+17AEF Created Zip Spec      14 (20) '2.0'\n+17AF0 Created OS            03 (3) 'Unix'\n+17AF1 Extract Zip Spec      14 (20) '2.0'\n+17AF2 Extract OS            00 (0) 'MS-DOS'\n+17AF3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1783A Compression Method    0008 (8) 'Deflated'\n-1783C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17840 CRC                   6100366B (1627403883)\n-17844 Compressed Size       000004BA (1210)\n-17848 Uncompressed Size     000011E6 (4582)\n-1784C Filename Length       004A (74)\n-1784E Extra Length          0000 (0)\n-17850 Comment Length        0000 (0)\n-17852 Disk Start            0000 (0)\n-17854 Int File Attributes   0000 (0)\n+17AF5 Compression Method    0008 (8) 'Deflated'\n+17AF7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17AFB CRC                   5E735CAA (1584618666)\n+17AFF Compressed Size       000004C3 (1219)\n+17B03 Uncompressed Size     00001249 (4681)\n+17B07 Filename Length       004A (74)\n+17B09 Extra Length          0000 (0)\n+17B0B Comment Length        0000 (0)\n+17B0D Disk Start            0000 (0)\n+17B0F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17856 Ext File Attributes   81A40000 (2175008768)\n+17B11 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-1785A Local Header Offset   0001286B (75883)\n-1785E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17B15 Local Header Offset   00012ACF (76495)\n+17B19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1785E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17B19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-178A8 CENTRAL HEADER #83    02014B50 (33639248)\n-178AC Created Zip Spec      14 (20) '2.0'\n-178AD Created OS            03 (3) 'Unix'\n-178AE Extract Zip Spec      14 (20) '2.0'\n-178AF Extract OS            00 (0) 'MS-DOS'\n-178B0 General Purpose Flag  0800 (2048)\n+17B63 CENTRAL HEADER #83    02014B50 (33639248)\n+17B67 Created Zip Spec      14 (20) '2.0'\n+17B68 Created OS            03 (3) 'Unix'\n+17B69 Extract Zip Spec      14 (20) '2.0'\n+17B6A Extract OS            00 (0) 'MS-DOS'\n+17B6B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-178B2 Compression Method    0008 (8) 'Deflated'\n-178B4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-178B8 CRC                   8939A522 (2302256418)\n-178BC Compressed Size       000002B6 (694)\n-178C0 Uncompressed Size     00000548 (1352)\n-178C4 Filename Length       0047 (71)\n-178C6 Extra Length          0000 (0)\n-178C8 Comment Length        0000 (0)\n-178CA Disk Start            0000 (0)\n-178CC Int File Attributes   0000 (0)\n+17B6D Compression Method    0008 (8) 'Deflated'\n+17B6F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17B73 CRC                   F08C4805 (4035725317)\n+17B77 Compressed Size       000002C0 (704)\n+17B7B Uncompressed Size     0000056A (1386)\n+17B7F Filename Length       0047 (71)\n+17B81 Extra Length          0000 (0)\n+17B83 Comment Length        0000 (0)\n+17B85 Disk Start            0000 (0)\n+17B87 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-178CE Ext File Attributes   81A40000 (2175008768)\n+17B89 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-178D2 Local Header Offset   00012D8D (77197)\n-178D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17B8D Local Header Offset   00012FFA (77818)\n+17B91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x178D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17B91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1791D CENTRAL HEADER #84    02014B50 (33639248)\n-17921 Created Zip Spec      14 (20) '2.0'\n-17922 Created OS            03 (3) 'Unix'\n-17923 Extract Zip Spec      14 (20) '2.0'\n-17924 Extract OS            00 (0) 'MS-DOS'\n-17925 General Purpose Flag  0800 (2048)\n+17BD8 CENTRAL HEADER #84    02014B50 (33639248)\n+17BDC Created Zip Spec      14 (20) '2.0'\n+17BDD Created OS            03 (3) 'Unix'\n+17BDE Extract Zip Spec      14 (20) '2.0'\n+17BDF Extract OS            00 (0) 'MS-DOS'\n+17BE0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17927 Compression Method    0008 (8) 'Deflated'\n-17929 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1792D CRC                   2244431E (574898974)\n-17931 Compressed Size       00000301 (769)\n-17935 Uncompressed Size     000006DE (1758)\n-17939 Filename Length       004B (75)\n-1793B Extra Length          0000 (0)\n-1793D Comment Length        0000 (0)\n-1793F Disk Start            0000 (0)\n-17941 Int File Attributes   0000 (0)\n+17BE2 Compression Method    0008 (8) 'Deflated'\n+17BE4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17BE8 CRC                   EACCF2B1 (3939300017)\n+17BEC Compressed Size       0000030A (778)\n+17BF0 Uncompressed Size     00000704 (1796)\n+17BF4 Filename Length       004B (75)\n+17BF6 Extra Length          0000 (0)\n+17BF8 Comment Length        0000 (0)\n+17BFA Disk Start            0000 (0)\n+17BFC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17943 Ext File Attributes   81A40000 (2175008768)\n+17BFE 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-17947 Local Header Offset   000130A8 (77992)\n-1794B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17C02 Local Header Offset   0001331F (78623)\n+17C06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1794B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17C06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17996 CENTRAL HEADER #85    02014B50 (33639248)\n-1799A Created Zip Spec      14 (20) '2.0'\n-1799B Created OS            03 (3) 'Unix'\n-1799C Extract Zip Spec      14 (20) '2.0'\n-1799D Extract OS            00 (0) 'MS-DOS'\n-1799E General Purpose Flag  0800 (2048)\n+17C51 CENTRAL HEADER #85    02014B50 (33639248)\n+17C55 Created Zip Spec      14 (20) '2.0'\n+17C56 Created OS            03 (3) 'Unix'\n+17C57 Extract Zip Spec      14 (20) '2.0'\n+17C58 Extract OS            00 (0) 'MS-DOS'\n+17C59 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-179A0 Compression Method    0008 (8) 'Deflated'\n-179A2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-179A6 CRC                   6B0A1F36 (1795825462)\n-179AA Compressed Size       000002B6 (694)\n-179AE Uncompressed Size     00000544 (1348)\n-179B2 Filename Length       0046 (70)\n-179B4 Extra Length          0000 (0)\n-179B6 Comment Length        0000 (0)\n-179B8 Disk Start            0000 (0)\n-179BA Int File Attributes   0000 (0)\n+17C5B Compression Method    0008 (8) 'Deflated'\n+17C5D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17C61 CRC                   69ADD8AE (1773000878)\n+17C65 Compressed Size       000002C0 (704)\n+17C69 Uncompressed Size     00000566 (1382)\n+17C6D Filename Length       0046 (70)\n+17C6F Extra Length          0000 (0)\n+17C71 Comment Length        0000 (0)\n+17C73 Disk Start            0000 (0)\n+17C75 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-179BC Ext File Attributes   81A40000 (2175008768)\n+17C77 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-179C0 Local Header Offset   00013412 (78866)\n-179C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17C7B Local Header Offset   00013692 (79506)\n+17C7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x179C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17C7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17A0A CENTRAL HEADER #86    02014B50 (33639248)\n-17A0E Created Zip Spec      14 (20) '2.0'\n-17A0F Created OS            03 (3) 'Unix'\n-17A10 Extract Zip Spec      14 (20) '2.0'\n-17A11 Extract OS            00 (0) 'MS-DOS'\n-17A12 General Purpose Flag  0800 (2048)\n+17CC5 CENTRAL HEADER #86    02014B50 (33639248)\n+17CC9 Created Zip Spec      14 (20) '2.0'\n+17CCA Created OS            03 (3) 'Unix'\n+17CCB Extract Zip Spec      14 (20) '2.0'\n+17CCC Extract OS            00 (0) 'MS-DOS'\n+17CCD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17A14 Compression Method    0008 (8) 'Deflated'\n-17A16 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17A1A CRC                   F6AB8A5C (4138437212)\n-17A1E Compressed Size       000003FD (1021)\n-17A22 Uncompressed Size     00000B30 (2864)\n-17A26 Filename Length       0059 (89)\n-17A28 Extra Length          0000 (0)\n-17A2A Comment Length        0000 (0)\n-17A2C Disk Start            0000 (0)\n-17A2E Int File Attributes   0000 (0)\n+17CCF Compression Method    0008 (8) 'Deflated'\n+17CD1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17CD5 CRC                   2470BA0F (611367439)\n+17CD9 Compressed Size       00000408 (1032)\n+17CDD Uncompressed Size     00000B77 (2935)\n+17CE1 Filename Length       0059 (89)\n+17CE3 Extra Length          0000 (0)\n+17CE5 Comment Length        0000 (0)\n+17CE7 Disk Start            0000 (0)\n+17CE9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17A30 Ext File Attributes   81A40000 (2175008768)\n+17CEB 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-17A34 Local Header Offset   0001372C (79660)\n-17A38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17CEF Local Header Offset   000139B6 (80310)\n+17CF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17A38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17CF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17A91 CENTRAL HEADER #87    02014B50 (33639248)\n-17A95 Created Zip Spec      14 (20) '2.0'\n-17A96 Created OS            03 (3) 'Unix'\n-17A97 Extract Zip Spec      14 (20) '2.0'\n-17A98 Extract OS            00 (0) 'MS-DOS'\n-17A99 General Purpose Flag  0800 (2048)\n+17D4C CENTRAL HEADER #87    02014B50 (33639248)\n+17D50 Created Zip Spec      14 (20) '2.0'\n+17D51 Created OS            03 (3) 'Unix'\n+17D52 Extract Zip Spec      14 (20) '2.0'\n+17D53 Extract OS            00 (0) 'MS-DOS'\n+17D54 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17A9B Compression Method    0008 (8) 'Deflated'\n-17A9D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17AA1 CRC                   8ECDA075 (2395840629)\n-17AA5 Compressed Size       00000340 (832)\n-17AA9 Uncompressed Size     00000705 (1797)\n-17AAD Filename Length       004D (77)\n-17AAF Extra Length          0000 (0)\n-17AB1 Comment Length        0000 (0)\n-17AB3 Disk Start            0000 (0)\n-17AB5 Int File Attributes   0000 (0)\n+17D56 Compression Method    0008 (8) 'Deflated'\n+17D58 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17D5C CRC                   F02EA49E (4029588638)\n+17D60 Compressed Size       00000347 (839)\n+17D64 Uncompressed Size     00000730 (1840)\n+17D68 Filename Length       004D (77)\n+17D6A Extra Length          0000 (0)\n+17D6C Comment Length        0000 (0)\n+17D6E Disk Start            0000 (0)\n+17D70 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17AB7 Ext File Attributes   81A40000 (2175008768)\n+17D72 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-17ABB Local Header Offset   00013BA0 (80800)\n-17ABF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17D76 Local Header Offset   00013E35 (81461)\n+17D7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17ABF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17D7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17B0C CENTRAL HEADER #88    02014B50 (33639248)\n-17B10 Created Zip Spec      14 (20) '2.0'\n-17B11 Created OS            03 (3) 'Unix'\n-17B12 Extract Zip Spec      14 (20) '2.0'\n-17B13 Extract OS            00 (0) 'MS-DOS'\n-17B14 General Purpose Flag  0800 (2048)\n+17DC7 CENTRAL HEADER #88    02014B50 (33639248)\n+17DCB Created Zip Spec      14 (20) '2.0'\n+17DCC Created OS            03 (3) 'Unix'\n+17DCD Extract Zip Spec      14 (20) '2.0'\n+17DCE Extract OS            00 (0) 'MS-DOS'\n+17DCF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17B16 Compression Method    0008 (8) 'Deflated'\n-17B18 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17B1C CRC                   C535197D (3308591485)\n-17B20 Compressed Size       0000033E (830)\n-17B24 Uncompressed Size     00000700 (1792)\n-17B28 Filename Length       004C (76)\n-17B2A Extra Length          0000 (0)\n-17B2C Comment Length        0000 (0)\n-17B2E Disk Start            0000 (0)\n-17B30 Int File Attributes   0000 (0)\n+17DD1 Compression Method    0008 (8) 'Deflated'\n+17DD3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17DD7 CRC                   91BA4E47 (2444906055)\n+17DDB Compressed Size       00000346 (838)\n+17DDF Uncompressed Size     0000072B (1835)\n+17DE3 Filename Length       004C (76)\n+17DE5 Extra Length          0000 (0)\n+17DE7 Comment Length        0000 (0)\n+17DE9 Disk Start            0000 (0)\n+17DEB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17B32 Ext File Attributes   81A40000 (2175008768)\n+17DED 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-17B36 Local Header Offset   00013F4B (81739)\n-17B3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17DF1 Local Header Offset   000141E7 (82407)\n+17DF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17B3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17DF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17B86 CENTRAL HEADER #89    02014B50 (33639248)\n-17B8A Created Zip Spec      14 (20) '2.0'\n-17B8B Created OS            03 (3) 'Unix'\n-17B8C Extract Zip Spec      14 (20) '2.0'\n-17B8D Extract OS            00 (0) 'MS-DOS'\n-17B8E General Purpose Flag  0800 (2048)\n+17E41 CENTRAL HEADER #89    02014B50 (33639248)\n+17E45 Created Zip Spec      14 (20) '2.0'\n+17E46 Created OS            03 (3) 'Unix'\n+17E47 Extract Zip Spec      14 (20) '2.0'\n+17E48 Extract OS            00 (0) 'MS-DOS'\n+17E49 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17B90 Compression Method    0008 (8) 'Deflated'\n-17B92 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17B96 CRC                   A895CAB3 (2828389043)\n-17B9A Compressed Size       000006F8 (1784)\n-17B9E Uncompressed Size     00001870 (6256)\n-17BA2 Filename Length       0052 (82)\n-17BA4 Extra Length          0000 (0)\n-17BA6 Comment Length        0000 (0)\n-17BA8 Disk Start            0000 (0)\n-17BAA Int File Attributes   0000 (0)\n+17E4B Compression Method    0008 (8) 'Deflated'\n+17E4D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17E51 CRC                   594A4504 (1498039556)\n+17E55 Compressed Size       00000705 (1797)\n+17E59 Uncompressed Size     000018FD (6397)\n+17E5D Filename Length       0052 (82)\n+17E5F Extra Length          0000 (0)\n+17E61 Comment Length        0000 (0)\n+17E63 Disk Start            0000 (0)\n+17E65 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17BAC Ext File Attributes   81A40000 (2175008768)\n+17E67 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-17BB0 Local Header Offset   000142F3 (82675)\n-17BB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17E6B Local Header Offset   00014597 (83351)\n+17E6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17BB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17E6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17C06 CENTRAL HEADER #90    02014B50 (33639248)\n-17C0A Created Zip Spec      14 (20) '2.0'\n-17C0B Created OS            03 (3) 'Unix'\n-17C0C Extract Zip Spec      14 (20) '2.0'\n-17C0D Extract OS            00 (0) 'MS-DOS'\n-17C0E General Purpose Flag  0800 (2048)\n+17EC1 CENTRAL HEADER #90    02014B50 (33639248)\n+17EC5 Created Zip Spec      14 (20) '2.0'\n+17EC6 Created OS            03 (3) 'Unix'\n+17EC7 Extract Zip Spec      14 (20) '2.0'\n+17EC8 Extract OS            00 (0) 'MS-DOS'\n+17EC9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17C10 Compression Method    0008 (8) 'Deflated'\n-17C12 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17C16 CRC                   C67BB267 (3329995367)\n-17C1A Compressed Size       00000584 (1412)\n-17C1E Uncompressed Size     0000106A (4202)\n-17C22 Filename Length       004C (76)\n-17C24 Extra Length          0000 (0)\n-17C26 Comment Length        0000 (0)\n-17C28 Disk Start            0000 (0)\n-17C2A Int File Attributes   0000 (0)\n+17ECB Compression Method    0008 (8) 'Deflated'\n+17ECD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17ED1 CRC                   FF3DB830 (4282234928)\n+17ED5 Compressed Size       0000058E (1422)\n+17ED9 Uncompressed Size     000010CE (4302)\n+17EDD Filename Length       004C (76)\n+17EDF Extra Length          0000 (0)\n+17EE1 Comment Length        0000 (0)\n+17EE3 Disk Start            0000 (0)\n+17EE5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17C2C Ext File Attributes   81A40000 (2175008768)\n+17EE7 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-17C30 Local Header Offset   00014A5B (84571)\n-17C34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17EEB Local Header Offset   00014D0C (85260)\n+17EEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17C34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17EEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17C80 CENTRAL HEADER #91    02014B50 (33639248)\n-17C84 Created Zip Spec      14 (20) '2.0'\n-17C85 Created OS            03 (3) 'Unix'\n-17C86 Extract Zip Spec      14 (20) '2.0'\n-17C87 Extract OS            00 (0) 'MS-DOS'\n-17C88 General Purpose Flag  0800 (2048)\n+17F3B CENTRAL HEADER #91    02014B50 (33639248)\n+17F3F Created Zip Spec      14 (20) '2.0'\n+17F40 Created OS            03 (3) 'Unix'\n+17F41 Extract Zip Spec      14 (20) '2.0'\n+17F42 Extract OS            00 (0) 'MS-DOS'\n+17F43 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17C8A Compression Method    0008 (8) 'Deflated'\n-17C8C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17C90 CRC                   ACE74F1F (2900840223)\n-17C94 Compressed Size       00000035 (53)\n-17C98 Uncompressed Size     0000003D (61)\n-17C9C Filename Length       0046 (70)\n-17C9E Extra Length          0000 (0)\n-17CA0 Comment Length        0000 (0)\n-17CA2 Disk Start            0000 (0)\n-17CA4 Int File Attributes   0000 (0)\n+17F45 Compression Method    0008 (8) 'Deflated'\n+17F47 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17F4B CRC                   ACE74F1F (2900840223)\n+17F4F Compressed Size       00000035 (53)\n+17F53 Uncompressed Size     0000003D (61)\n+17F57 Filename Length       0046 (70)\n+17F59 Extra Length          0000 (0)\n+17F5B Comment Length        0000 (0)\n+17F5D Disk Start            0000 (0)\n+17F5F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17CA6 Ext File Attributes   81A40000 (2175008768)\n+17F61 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-17CAA Local Header Offset   00015049 (86089)\n-17CAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17F65 Local Header Offset   00015304 (86788)\n+17F69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17CAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17F69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17CF4 CENTRAL HEADER #92    02014B50 (33639248)\n-17CF8 Created Zip Spec      14 (20) '2.0'\n-17CF9 Created OS            03 (3) 'Unix'\n-17CFA Extract Zip Spec      14 (20) '2.0'\n-17CFB Extract OS            00 (0) 'MS-DOS'\n-17CFC General Purpose Flag  0800 (2048)\n+17FAF CENTRAL HEADER #92    02014B50 (33639248)\n+17FB3 Created Zip Spec      14 (20) '2.0'\n+17FB4 Created OS            03 (3) 'Unix'\n+17FB5 Extract Zip Spec      14 (20) '2.0'\n+17FB6 Extract OS            00 (0) 'MS-DOS'\n+17FB7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17CFE Compression Method    0008 (8) 'Deflated'\n-17D00 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17D04 CRC                   F8A431C6 (4171510214)\n-17D08 Compressed Size       00000044 (68)\n-17D0C Uncompressed Size     00000047 (71)\n-17D10 Filename Length       0044 (68)\n-17D12 Extra Length          0000 (0)\n-17D14 Comment Length        0000 (0)\n-17D16 Disk Start            0000 (0)\n-17D18 Int File Attributes   0000 (0)\n+17FB9 Compression Method    0008 (8) 'Deflated'\n+17FBB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+17FBF CRC                   F8A431C6 (4171510214)\n+17FC3 Compressed Size       00000044 (68)\n+17FC7 Uncompressed Size     00000047 (71)\n+17FCB Filename Length       0044 (68)\n+17FCD Extra Length          0000 (0)\n+17FCF Comment Length        0000 (0)\n+17FD1 Disk Start            0000 (0)\n+17FD3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17D1A Ext File Attributes   81A40000 (2175008768)\n+17FD5 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-17D1E Local Header Offset   000150E2 (86242)\n-17D22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17FD9 Local Header Offset   0001539D (86941)\n+17FDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17D22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17FDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17D66 CENTRAL HEADER #93    02014B50 (33639248)\n-17D6A Created Zip Spec      14 (20) '2.0'\n-17D6B Created OS            03 (3) 'Unix'\n-17D6C Extract Zip Spec      14 (20) '2.0'\n-17D6D Extract OS            00 (0) 'MS-DOS'\n-17D6E General Purpose Flag  0800 (2048)\n+18021 CENTRAL HEADER #93    02014B50 (33639248)\n+18025 Created Zip Spec      14 (20) '2.0'\n+18026 Created OS            03 (3) 'Unix'\n+18027 Extract Zip Spec      14 (20) '2.0'\n+18028 Extract OS            00 (0) 'MS-DOS'\n+18029 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17D70 Compression Method    0008 (8) 'Deflated'\n-17D72 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17D76 CRC                   D03529EC (3493145068)\n-17D7A Compressed Size       00000062 (98)\n-17D7E Uncompressed Size     00000113 (275)\n-17D82 Filename Length       0050 (80)\n-17D84 Extra Length          0000 (0)\n-17D86 Comment Length        0000 (0)\n-17D88 Disk Start            0000 (0)\n-17D8A Int File Attributes   0000 (0)\n+1802B Compression Method    0008 (8) 'Deflated'\n+1802D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+18031 CRC                   3DF8163B (1039668795)\n+18035 Compressed Size       00000065 (101)\n+18039 Uncompressed Size     00000116 (278)\n+1803D Filename Length       0050 (80)\n+1803F Extra Length          0000 (0)\n+18041 Comment Length        0000 (0)\n+18043 Disk Start            0000 (0)\n+18045 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17D8C Ext File Attributes   81A40000 (2175008768)\n+18047 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-17D90 Local Header Offset   00015188 (86408)\n-17D94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1804B Local Header Offset   00015443 (87107)\n+1804F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17D94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1804F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17DE4 CENTRAL HEADER #94    02014B50 (33639248)\n-17DE8 Created Zip Spec      14 (20) '2.0'\n-17DE9 Created OS            03 (3) 'Unix'\n-17DEA Extract Zip Spec      14 (20) '2.0'\n-17DEB Extract OS            00 (0) 'MS-DOS'\n-17DEC General Purpose Flag  0800 (2048)\n+1809F CENTRAL HEADER #94    02014B50 (33639248)\n+180A3 Created Zip Spec      14 (20) '2.0'\n+180A4 Created OS            03 (3) 'Unix'\n+180A5 Extract Zip Spec      14 (20) '2.0'\n+180A6 Extract OS            00 (0) 'MS-DOS'\n+180A7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17DEE Compression Method    0008 (8) 'Deflated'\n-17DF0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17DF4 CRC                   0C0A9CCA (202022090)\n-17DF8 Compressed Size       000000D3 (211)\n-17DFC Uncompressed Size     000002CB (715)\n-17E00 Filename Length       0058 (88)\n-17E02 Extra Length          0000 (0)\n-17E04 Comment Length        0000 (0)\n-17E06 Disk Start            0000 (0)\n-17E08 Int File Attributes   0000 (0)\n+180A9 Compression Method    0008 (8) 'Deflated'\n+180AB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+180AF CRC                   7138BB7F (1899543423)\n+180B3 Compressed Size       000000D5 (213)\n+180B7 Uncompressed Size     000002D4 (724)\n+180BB Filename Length       0058 (88)\n+180BD Extra Length          0000 (0)\n+180BF Comment Length        0000 (0)\n+180C1 Disk Start            0000 (0)\n+180C3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17E0A Ext File Attributes   81A40000 (2175008768)\n+180C5 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-17E0E Local Header Offset   00015258 (86616)\n-17E12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+180C9 Local Header Offset   00015516 (87318)\n+180CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17E12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x180CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17E6A CENTRAL HEADER #95    02014B50 (33639248)\n-17E6E Created Zip Spec      14 (20) '2.0'\n-17E6F Created OS            03 (3) 'Unix'\n-17E70 Extract Zip Spec      14 (20) '2.0'\n-17E71 Extract OS            00 (0) 'MS-DOS'\n-17E72 General Purpose Flag  0800 (2048)\n+18125 CENTRAL HEADER #95    02014B50 (33639248)\n+18129 Created Zip Spec      14 (20) '2.0'\n+1812A Created OS            03 (3) 'Unix'\n+1812B Extract Zip Spec      14 (20) '2.0'\n+1812C Extract OS            00 (0) 'MS-DOS'\n+1812D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17E74 Compression Method    0008 (8) 'Deflated'\n-17E76 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17E7A CRC                   CCA3FD93 (3433299347)\n-17E7E Compressed Size       0000006C (108)\n-17E82 Uncompressed Size     000000B6 (182)\n-17E86 Filename Length       0052 (82)\n-17E88 Extra Length          0000 (0)\n-17E8A Comment Length        0000 (0)\n-17E8C Disk Start            0000 (0)\n-17E8E Int File Attributes   0000 (0)\n+1812F Compression Method    0008 (8) 'Deflated'\n+18131 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+18135 CRC                   0D088F60 (218664800)\n+18139 Compressed Size       0000006E (110)\n+1813D Uncompressed Size     000000B8 (184)\n+18141 Filename Length       0052 (82)\n+18143 Extra Length          0000 (0)\n+18145 Comment Length        0000 (0)\n+18147 Disk Start            0000 (0)\n+18149 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17E90 Ext File Attributes   81A40000 (2175008768)\n+1814B 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-17E94 Local Header Offset   000153A1 (86945)\n-17E98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1814F Local Header Offset   00015661 (87649)\n+18153 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17E98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x18153: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17EEA CENTRAL HEADER #96    02014B50 (33639248)\n-17EEE Created Zip Spec      14 (20) '2.0'\n-17EEF Created OS            03 (3) 'Unix'\n-17EF0 Extract Zip Spec      14 (20) '2.0'\n-17EF1 Extract OS            00 (0) 'MS-DOS'\n-17EF2 General Purpose Flag  0800 (2048)\n+181A5 CENTRAL HEADER #96    02014B50 (33639248)\n+181A9 Created Zip Spec      14 (20) '2.0'\n+181AA Created OS            03 (3) 'Unix'\n+181AB Extract Zip Spec      14 (20) '2.0'\n+181AC Extract OS            00 (0) 'MS-DOS'\n+181AD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17EF4 Compression Method    0008 (8) 'Deflated'\n-17EF6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17EFA CRC                   364739E6 (910637542)\n-17EFE Compressed Size       000003CF (975)\n-17F02 Uncompressed Size     00000BF2 (3058)\n-17F06 Filename Length       003A (58)\n-17F08 Extra Length          0000 (0)\n-17F0A Comment Length        0000 (0)\n-17F0C Disk Start            0000 (0)\n-17F0E Int File Attributes   0000 (0)\n+181AF Compression Method    0008 (8) 'Deflated'\n+181B1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+181B5 CRC                   4FF02D0F (1341140239)\n+181B9 Compressed Size       000003C8 (968)\n+181BD Uncompressed Size     00000BA1 (2977)\n+181C1 Filename Length       003A (58)\n+181C3 Extra Length          0000 (0)\n+181C5 Comment Length        0000 (0)\n+181C7 Disk Start            0000 (0)\n+181C9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17F10 Ext File Attributes   81A40000 (2175008768)\n+181CB 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-17F14 Local Header Offset   0001547D (87165)\n-17F18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+181CF Local Header Offset   0001573F (87871)\n+181D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17F18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x181D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17F52 CENTRAL HEADER #97    02014B50 (33639248)\n-17F56 Created Zip Spec      14 (20) '2.0'\n-17F57 Created OS            03 (3) 'Unix'\n-17F58 Extract Zip Spec      14 (20) '2.0'\n-17F59 Extract OS            00 (0) 'MS-DOS'\n-17F5A General Purpose Flag  0800 (2048)\n+1820D CENTRAL HEADER #97    02014B50 (33639248)\n+18211 Created Zip Spec      14 (20) '2.0'\n+18212 Created OS            03 (3) 'Unix'\n+18213 Extract Zip Spec      14 (20) '2.0'\n+18214 Extract OS            00 (0) 'MS-DOS'\n+18215 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17F5C Compression Method    0008 (8) 'Deflated'\n-17F5E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-17F62 CRC                   EC609363 (3965752163)\n-17F66 Compressed Size       00000047 (71)\n-17F6A Uncompressed Size     00000049 (73)\n-17F6E Filename Length       0041 (65)\n-17F70 Extra Length          0000 (0)\n-17F72 Comment Length        0000 (0)\n-17F74 Disk Start            0000 (0)\n-17F76 Int File Attributes   0000 (0)\n+18217 Compression Method    0008 (8) 'Deflated'\n+18219 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1821D CRC                   EC609363 (3965752163)\n+18221 Compressed Size       00000047 (71)\n+18225 Uncompressed Size     00000049 (73)\n+18229 Filename Length       0041 (65)\n+1822B Extra Length          0000 (0)\n+1822D Comment Length        0000 (0)\n+1822F Disk Start            0000 (0)\n+18231 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-17F78 Ext File Attributes   81A40000 (2175008768)\n+18233 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-17F7C Local Header Offset   000158A4 (88228)\n-17F80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+18237 Local Header Offset   00015B5F (88927)\n+1823B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17F80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1823B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-17FC1 END CENTRAL HEADER    06054B50 (101010256)\n-17FC5 Number of this disk   0000 (0)\n-17FC7 Central Dir Disk no   0000 (0)\n-17FC9 Entries in this disk  0061 (97)\n-17FCB Total Entries         0061 (97)\n-17FCD Size of Central Dir   00002677 (9847)\n-17FD1 Offset to Central Dir 0001594A (88394)\n-17FD5 Comment Length        0000 (0)\n+1827C END CENTRAL HEADER    06054B50 (101010256)\n+18280 Number of this disk   0000 (0)\n+18282 Central Dir Disk no   0000 (0)\n+18284 Entries in this disk  0061 (97)\n+18286 Total Entries         0061 (97)\n+18288 Size of Central Dir   00002677 (9847)\n+1828C Offset to Central Dir 00015C05 (89093)\n+18290 Comment Length        0000 (0)\n #\n # Error Count: 21\n # Warning Count: 215\n #\n # Done\n"}, {"source1": "org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java", "source2": "org/apache/dubbo/metadata/DefaultMetadataParamsFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,55 +1,55 @@\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.metadata;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;\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.LOADBALANCE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.RELEASE_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.remoting.Constants.CODEC_KEY;\n-import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;\n-import static org.apache.dubbo.remoting.Constants.EXCHANGER_KEY;\n-import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;\n-import static org.apache.dubbo.rpc.Constants.DEPRECATED_KEY;\n-import static org.apache.dubbo.rpc.Constants.MOCK_KEY;\n-import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\n-import static org.apache.dubbo.rpc.cluster.Constants.WARMUP_KEY;\n-import static org.apache.dubbo.rpc.cluster.Constants.WEIGHT_KEY;\n-\n-@Activate\n-public class DefaultMetadataParamsFilter implements MetadataParamsFilter {\n-    @Override\n-    public String[] serviceParamsIncluded() {\n-        return new String[]{\n-                CODEC_KEY, EXCHANGER_KEY, SERIALIZATION_KEY, CLUSTER_KEY, CONNECTIONS_KEY, DEPRECATED_KEY,\n-                GROUP_KEY, LOADBALANCE_KEY, MOCK_KEY, PATH_KEY, TIMEOUT_KEY, TOKEN_KEY, VERSION_KEY, WARMUP_KEY,\n-                WEIGHT_KEY, DUBBO_VERSION_KEY, RELEASE_KEY\n-        };\n-    }\n-\n-\n-    @Override\n-    public String[] instanceParamsIncluded() {\n-        return new String[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.metadata;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;\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.LOADBALANCE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.RELEASE_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.remoting.Constants.CODEC_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.EXCHANGER_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.DEPRECATED_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.MOCK_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\r\n+import static org.apache.dubbo.rpc.cluster.Constants.WARMUP_KEY;\r\n+import static org.apache.dubbo.rpc.cluster.Constants.WEIGHT_KEY;\r\n+\r\n+@Activate\r\n+public class DefaultMetadataParamsFilter implements MetadataParamsFilter {\r\n+    @Override\r\n+    public String[] serviceParamsIncluded() {\r\n+        return new String[]{\r\n+                CODEC_KEY, EXCHANGER_KEY, SERIALIZATION_KEY, CLUSTER_KEY, CONNECTIONS_KEY, DEPRECATED_KEY,\r\n+                GROUP_KEY, LOADBALANCE_KEY, MOCK_KEY, PATH_KEY, TIMEOUT_KEY, TOKEN_KEY, VERSION_KEY, WARMUP_KEY,\r\n+                WEIGHT_KEY, DUBBO_VERSION_KEY, RELEASE_KEY\r\n+        };\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public String[] instanceParamsIncluded() {\r\n+        return new String[0];\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java", "source2": "org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,103 +1,103 @@\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.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-\n-import java.util.Collections;\n-import java.util.LinkedHashSet;\n-import java.util.List;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.util.Arrays.asList;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.rpc.model.ApplicationModel.getName;\n-\n-/**\n- * The {@link ServiceNameMapping} implementation based on {@link DynamicConfiguration}\n- */\n-public class DynamicConfigurationServiceNameMapping implements ServiceNameMapping {\n-\n-    public static String DEFAULT_MAPPING_GROUP = \"mapping\";\n-\n-    private static final List<String> IGNORED_SERVICE_INTERFACES = asList(MetadataService.class.getName());\n-\n-    private final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    @Override\n-    public void map(URL url) {\n-        String serviceInterface = url.getServiceInterface();\n-        String group = url.getParameter(GROUP_KEY);\n-        String version = url.getParameter(VERSION_KEY);\n-        String protocol = url.getProtocol();\n-\n-        if (IGNORED_SERVICE_INTERFACES.contains(serviceInterface)) {\n-            return;\n-        }\n-\n-        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();\n-\n-        // the Dubbo Service Key as group\n-        // the service(application) name as key\n-        // It does matter whatever the content is, we just need a record\n-        String key = getName();\n-        String content = valueOf(System.currentTimeMillis());\n-\n-        execute(() -> {\n-            dynamicConfiguration.publishConfig(key, ServiceNameMapping.buildGroup(serviceInterface, group, version, protocol), content);\n-            if (logger.isInfoEnabled()) {\n-                logger.info(String.format(\"Dubbo service[%s] mapped to interface name[%s].\",\n-                        group, serviceInterface));\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public Set<String> getAndListen(URL url, MappingListener mappingListener) {\n-        String serviceInterface = url.getServiceInterface();\n-        String group = url.getParameter(GROUP_KEY);\n-        String version = url.getParameter(VERSION_KEY);\n-        String protocol = url.getProtocol();\n-        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();\n-\n-        Set<String> serviceNames = new LinkedHashSet<>();\n-        execute(() -> {\n-            Set<String> keys = dynamicConfiguration\n-                    .getConfigKeys(ServiceNameMapping.buildGroup(serviceInterface, group, version, protocol));\n-            if (CollectionUtils.isNotEmpty(keys)) {\n-                serviceNames.addAll(keys);\n-            }\n-        });\n-        return Collections.unmodifiableSet(serviceNames);\n-    }\n-\n-    private void execute(Runnable runnable) {\n-        try {\n-            runnable.run();\n-        } catch (Throwable e) {\n-            if (logger.isWarnEnabled()) {\n-                logger.warn(e.getMessage(), 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.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\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.CollectionUtils;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.util.Arrays.asList;\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+import static org.apache.dubbo.rpc.model.ApplicationModel.getName;\r\n+\r\n+/**\r\n+ * The {@link ServiceNameMapping} implementation based on {@link DynamicConfiguration}\r\n+ */\r\n+public class DynamicConfigurationServiceNameMapping implements ServiceNameMapping {\r\n+\r\n+    public static String DEFAULT_MAPPING_GROUP = \"mapping\";\r\n+\r\n+    private static final List<String> IGNORED_SERVICE_INTERFACES = asList(MetadataService.class.getName());\r\n+\r\n+    private final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    @Override\r\n+    public void map(URL url) {\r\n+        String serviceInterface = url.getServiceInterface();\r\n+        String group = url.getParameter(GROUP_KEY);\r\n+        String version = url.getParameter(VERSION_KEY);\r\n+        String protocol = url.getProtocol();\r\n+\r\n+        if (IGNORED_SERVICE_INTERFACES.contains(serviceInterface)) {\r\n+            return;\r\n+        }\r\n+\r\n+        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();\r\n+\r\n+        // the Dubbo Service Key as group\r\n+        // the service(application) name as key\r\n+        // It does matter whatever the content is, we just need a record\r\n+        String key = getName();\r\n+        String content = valueOf(System.currentTimeMillis());\r\n+\r\n+        execute(() -> {\r\n+            dynamicConfiguration.publishConfig(key, ServiceNameMapping.buildGroup(serviceInterface, group, version, protocol), content);\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(String.format(\"Dubbo service[%s] mapped to interface name[%s].\",\r\n+                        group, serviceInterface));\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public Set<String> getAndListen(URL url, MappingListener mappingListener) {\r\n+        String serviceInterface = url.getServiceInterface();\r\n+        String group = url.getParameter(GROUP_KEY);\r\n+        String version = url.getParameter(VERSION_KEY);\r\n+        String protocol = url.getProtocol();\r\n+        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();\r\n+\r\n+        Set<String> serviceNames = new LinkedHashSet<>();\r\n+        execute(() -> {\r\n+            Set<String> keys = dynamicConfiguration\r\n+                    .getConfigKeys(ServiceNameMapping.buildGroup(serviceInterface, group, version, protocol));\r\n+            if (CollectionUtils.isNotEmpty(keys)) {\r\n+                serviceNames.addAll(keys);\r\n+            }\r\n+        });\r\n+        return Collections.unmodifiableSet(serviceNames);\r\n+    }\r\n+\r\n+    private void execute(Runnable runnable) {\r\n+        try {\r\n+            runnable.run();\r\n+        } catch (Throwable e) {\r\n+            if (logger.isWarnEnabled()) {\r\n+                logger.warn(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MappingChangedEvent.java", "source2": "org/apache/dubbo/metadata/MappingChangedEvent.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,41 +1,41 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import java.util.Set;\n-\n-public class MappingChangedEvent {\n-    private String serviceKey;\n-    private Set<String> apps;\n-\n-    public String getServiceKey() {\n-        return serviceKey;\n-    }\n-\n-    public void setServiceKey(String serviceKey) {\n-        this.serviceKey = serviceKey;\n-    }\n-\n-    public Set<String> getApps() {\n-        return apps;\n-    }\n-\n-    public void setApps(Set<String> apps) {\n-        this.apps = apps;\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.metadata;\r\n+\r\n+import java.util.Set;\r\n+\r\n+public class MappingChangedEvent {\r\n+    private String serviceKey;\r\n+    private Set<String> apps;\r\n+\r\n+    public String getServiceKey() {\r\n+        return serviceKey;\r\n+    }\r\n+\r\n+    public void setServiceKey(String serviceKey) {\r\n+        this.serviceKey = serviceKey;\r\n+    }\r\n+\r\n+    public Set<String> getApps() {\r\n+        return apps;\r\n+    }\r\n+\r\n+    public void setApps(Set<String> apps) {\r\n+        this.apps = apps;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MappingListener.java", "source2": "org/apache/dubbo/metadata/MappingListener.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,21 +1,21 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-public interface MappingListener {\n-    void onEvent(MappingChangedEvent event);\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.metadata;\r\n+\r\n+public interface MappingListener {\r\n+    void onEvent(MappingChangedEvent event);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataChangeListener.java", "source2": "org/apache/dubbo/metadata/MetadataChangeListener.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,35 +1,35 @@\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.metadata;\n-\n-public interface MetadataChangeListener {\n-    /**\n-     * Call when metadata in provider side update <p/>\n-     * Used to notify consumer to update metadata of ServiceInstance\n-     *\n-     * @param metadata latest metadata\n-     */\n-    void onEvent(String metadata);\n-\n-    /**\n-     * Echo test\n-     * Used to check consumer still online\n-     */\n-    default String echo(String msg) {\n-        return msg;\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.metadata;\r\n+\r\n+public interface MetadataChangeListener {\r\n+    /**\r\n+     * Call when metadata in provider side update <p/>\r\n+     * Used to notify consumer to update metadata of ServiceInstance\r\n+     *\r\n+     * @param metadata latest metadata\r\n+     */\r\n+    void onEvent(String metadata);\r\n+\r\n+    /**\r\n+     * Echo test\r\n+     * Used to check consumer still online\r\n+     */\r\n+    default String echo(String msg) {\r\n+        return msg;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataConstants.java", "source2": "org/apache/dubbo/metadata/MetadataConstants.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,30 +1,30 @@\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.metadata;\n-\n-public class MetadataConstants {\n-    public static final String KEY_SEPARATOR = \":\";\n-    public static final String DEFAULT_PATH_TAG = \"metadata\";\n-    public static final String KEY_REVISION_PREFIX = \"revision\";\n-    public static final String META_DATA_STORE_TAG = \".metaData\";\n-    public static final String SERVICE_META_DATA_STORE_TAG = \".smd\";\n-    public static final String CONSUMER_META_DATA_STORE_TAG = \".cmd\";\n-    public static final String METADATA_PUBLISH_DELAY_KEY = \"dubbo.application.metadata.delay\";\n-    public static final int DEFAULT_METADATA_PUBLISH_DELAY = 5000;\n-    public static final String METADATA_PROXY_TIMEOUT_KEY = \"dubbo.application.metadata.delay\";\n-    public static final int DEFAULT_METADATA_TIMEOUT_VALUE = 5000;\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.metadata;\r\n+\r\n+public class MetadataConstants {\r\n+    public static final String KEY_SEPARATOR = \":\";\r\n+    public static final String DEFAULT_PATH_TAG = \"metadata\";\r\n+    public static final String KEY_REVISION_PREFIX = \"revision\";\r\n+    public static final String META_DATA_STORE_TAG = \".metaData\";\r\n+    public static final String SERVICE_META_DATA_STORE_TAG = \".smd\";\r\n+    public static final String CONSUMER_META_DATA_STORE_TAG = \".cmd\";\r\n+    public static final String METADATA_PUBLISH_DELAY_KEY = \"dubbo.application.metadata.delay\";\r\n+    public static final int DEFAULT_METADATA_PUBLISH_DELAY = 5000;\r\n+    public static final String METADATA_PROXY_TIMEOUT_KEY = \"dubbo.application.metadata.delay\";\r\n+    public static final int DEFAULT_METADATA_TIMEOUT_VALUE = 5000;\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataInfo.java", "source2": "org/apache/dubbo/metadata/MetadataInfo.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,449 +1,449 @@\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.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.compiler.support.ClassUtils;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.io.Serializable;\n-import java.lang.reflect.Method;\n-import java.util.Collections;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-import java.util.SortedSet;\n-import java.util.TreeSet;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DOT_SEPARATOR;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPARATOR;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-public class MetadataInfo implements Serializable {\n-    public static String DEFAULT_REVISION = \"0\";\n-    private String app;\n-    private String revision;\n-    private Map<String, ServiceInfo> services;\n-\n-    // used at runtime\n-    private transient Map<String, String> extendParams;\n-    private transient AtomicBoolean reported = new AtomicBoolean(false);\n-\n-    public MetadataInfo(String app) {\n-        this(app, null, null);\n-    }\n-\n-    public MetadataInfo(String app, String revision, Map<String, ServiceInfo> services) {\n-        this.app = app;\n-        this.revision = revision;\n-        this.services = services == null ? new HashMap<>() : services;\n-        this.extendParams = new HashMap<>();\n-    }\n-\n-    public void addService(ServiceInfo serviceInfo) {\n-        if (serviceInfo == null) {\n-            return;\n-        }\n-        this.services.put(serviceInfo.getMatchKey(), serviceInfo);\n-        markChanged();\n-    }\n-\n-    public void removeService(ServiceInfo serviceInfo) {\n-        if (serviceInfo == null) {\n-            return;\n-        }\n-        this.services.remove(serviceInfo.getMatchKey());\n-        markChanged();\n-    }\n-\n-    public void removeService(String key) {\n-        if (key == null) {\n-            return;\n-        }\n-        this.services.remove(key);\n-        markChanged();\n-    }\n-\n-    public String calAndGetRevision() {\n-        if (revision != null && hasReported()) {\n-            return revision;\n-        }\n-\n-        if (CollectionUtils.isEmptyMap(services)) {\n-            return DEFAULT_REVISION;\n-        }\n-\n-        StringBuilder sb = new StringBuilder();\n-        sb.append(app);\n-        for (Map.Entry<String, ServiceInfo> entry : services.entrySet()) {\n-            sb.append(entry.getValue().toDescString());\n-        }\n-        this.revision = RevisionResolver.calRevision(sb.toString());\n-        return revision;\n-    }\n-\n-    public void setRevision(String revision) {\n-        this.revision = revision;\n-    }\n-\n-    public boolean hasReported() {\n-        return reported.get();\n-    }\n-\n-    public void markReported() {\n-        reported.compareAndSet(false, true);\n-    }\n-\n-    public void markChanged() {\n-        reported.compareAndSet(true, false);\n-    }\n-\n-    public String getApp() {\n-        return app;\n-    }\n-\n-    public void setApp(String app) {\n-        this.app = app;\n-    }\n-\n-    public Map<String, ServiceInfo> getServices() {\n-        return services;\n-    }\n-\n-    public void setServices(Map<String, ServiceInfo> services) {\n-        this.services = services;\n-    }\n-\n-    public ServiceInfo getServiceInfo(String serviceKey) {\n-        return services.get(serviceKey);\n-    }\n-\n-    public Map<String, String> getExtendParams() {\n-        return extendParams;\n-    }\n-\n-    public String getParameter(String key, String serviceKey) {\n-        ServiceInfo serviceInfo = services.get(serviceKey);\n-        if (serviceInfo == null) {\n-            return null;\n-        }\n-        return serviceInfo.getParameter(key);\n-    }\n-\n-    public Map<String, String> getParameters(String serviceKey) {\n-        ServiceInfo serviceInfo = services.get(serviceKey);\n-        if (serviceInfo == null) {\n-            return Collections.emptyMap();\n-        }\n-        return serviceInfo.getAllParams();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"metadata{\" +\n-                \"app='\" + app + \"',\" +\n-                \"revision='\" + revision + \"',\" +\n-                \"services=\" + services +\n-                \"}\";\n-    }\n-\n-    public static class ServiceInfo implements Serializable {\n-        private static ExtensionLoader<MetadataParamsFilter> loader = ExtensionLoader.getExtensionLoader(MetadataParamsFilter.class);\n-        private String name;\n-        private String group;\n-        private String version;\n-        private String protocol;\n-        private String path; // most of the time, path is the same with the interface name.\n-        private Map<String, String> params;\n-\n-        // params configured on consumer side,\n-        private transient Map<String, String> consumerParams;\n-        // cached method params\n-        private transient Map<String, Map<String, String>> methodParams;\n-        private transient Map<String, Map<String, String>> consumerMethodParams;\n-        // cached numbers\n-        private transient Map<String, Number> numbers;\n-        private transient Map<String, Map<String, Number>> methodNumbers;\n-        // service + group + version\n-        private transient String serviceKey;\n-        // service + group + version + protocol\n-        private transient String matchKey;\n-\n-        private transient URL url;\n-\n-        public ServiceInfo() {\n-        }\n-\n-        public ServiceInfo(URL url) {\n-            this(url.getServiceInterface(), url.getParameter(GROUP_KEY), url.getParameter(VERSION_KEY), url.getProtocol(), url.getPath(), null);\n-\n-            this.url = url;\n-            Map<String, String> params = new HashMap<>();\n-            List<MetadataParamsFilter> filters = loader.getActivateExtension(url, \"params-filter\");\n-            for (MetadataParamsFilter filter : filters) {\n-                String[] paramsIncluded = filter.serviceParamsIncluded();\n-                if (ArrayUtils.isNotEmpty(paramsIncluded)) {\n-                    for (String p : paramsIncluded) {\n-                        String value = url.getParameter(p);\n-                        if (StringUtils.isNotEmpty(value) && params.get(p) == null) {\n-                            params.put(p, value);\n-                        }\n-                        String[] methods = url.getParameter(METHODS_KEY, (String[]) null);\n-                        if (methods != null) {\n-                            for (String method : methods) {\n-                                String mValue = url.getMethodParameterStrict(method, p);\n-                                if (StringUtils.isNotEmpty(mValue)) {\n-                                    params.put(method + DOT_SEPARATOR + p, mValue);\n-                                }\n-                            }\n-                        }\n-                    }\n-                }\n-            }\n-            this.params = params;\n-        }\n-\n-        public ServiceInfo(String name, String group, String version, String protocol, String path, Map<String, String> params) {\n-            this.name = name;\n-            this.group = group;\n-            this.version = version;\n-            this.protocol = protocol;\n-            this.path = path;\n-            this.params = params == null ? new HashMap<>() : params;\n-\n-            this.serviceKey = URL.buildKey(name, group, version);\n-            this.matchKey = buildMatchKey();\n-        }\n-\n-        public String getMatchKey() {\n-            if (matchKey != null) {\n-                return matchKey;\n-            }\n-            buildMatchKey();\n-            return matchKey;\n-        }\n-\n-        private String buildMatchKey() {\n-            matchKey = getServiceKey();\n-            if (StringUtils.isNotEmpty(protocol)) {\n-                matchKey = getServiceKey() + GROUP_CHAR_SEPARATOR + protocol;\n-            }\n-            return matchKey;\n-        }\n-\n-        public String getServiceKey() {\n-            if (serviceKey != null) {\n-                return serviceKey;\n-            }\n-            this.serviceKey = URL.buildKey(name, group, version);\n-            return serviceKey;\n-        }\n-\n-        public String getName() {\n-            return name;\n-        }\n-\n-        public void setName(String name) {\n-            this.name = name;\n-        }\n-\n-        public String getGroup() {\n-            return group;\n-        }\n-\n-        public void setGroup(String group) {\n-            this.group = group;\n-        }\n-\n-        public String getVersion() {\n-            return version;\n-        }\n-\n-        public void setVersion(String version) {\n-            this.version = version;\n-        }\n-\n-        public String getPath() {\n-            return path;\n-        }\n-\n-        public void setPath(String path) {\n-            this.path = path;\n-        }\n-\n-        public Map<String, String> getParams() {\n-            if (params == null) {\n-                return Collections.emptyMap();\n-            }\n-            return params;\n-        }\n-\n-        public void setParams(Map<String, String> params) {\n-            this.params = params;\n-        }\n-\n-        public Map<String, String> getAllParams() {\n-            if (consumerParams != null) {\n-                Map<String, String> allParams = new HashMap<>((int) ((params.size() + consumerParams.size()) / 0.75f + 1));\n-                allParams.putAll(params);\n-                allParams.putAll(consumerParams);\n-                return allParams;\n-            }\n-            return params;\n-        }\n-\n-        public String getParameter(String key) {\n-            if (consumerParams != null) {\n-                String value = consumerParams.get(key);\n-                if (value != null) {\n-                    return value;\n-                }\n-            }\n-            return params.get(key);\n-        }\n-\n-        public String getMethodParameter(String method, String key, String defaultValue) {\n-            if (methodParams == null) {\n-                methodParams = URL.toMethodParameters(params);\n-                consumerMethodParams = URL.toMethodParameters(consumerParams);\n-            }\n-\n-            String value = getMethodParameter(method, key, consumerMethodParams);\n-            if (value != null) {\n-                return value;\n-            }\n-            value = getMethodParameter(method, key, methodParams);\n-            return value == null ? defaultValue : value;\n-        }\n-\n-        private String getMethodParameter(String method, String key, Map<String, Map<String, String>> map) {\n-            Map<String, String> keyMap = map.get(method);\n-            String value = null;\n-            if (keyMap != null) {\n-                value = keyMap.get(key);\n-            }\n-            if (StringUtils.isEmpty(value)) {\n-                value = getParameter(key);\n-            }\n-            return value;\n-        }\n-\n-        public boolean hasMethodParameter(String method, String key) {\n-            String value = this.getMethodParameter(method, key, (String) null);\n-            return StringUtils.isNotEmpty(value);\n-        }\n-\n-        public boolean hasMethodParameter(String method) {\n-            if (methodParams == null) {\n-                methodParams = URL.toMethodParameters(params);\n-                consumerMethodParams = URL.toMethodParameters(consumerParams);\n-            }\n-\n-            return consumerMethodParams.containsKey(method) || methodParams.containsKey(method);\n-        }\n-\n-        public String toDescString() {\n-            return this.getMatchKey() + getMethodSignaturesString() + getParams();\n-        }\n-\n-        private String getMethodSignaturesString() {\n-            SortedSet<String> methodStrings = new TreeSet();\n-\n-            Method[] methods = ClassUtils.forName(name).getMethods();\n-            for (Method method : methods) {\n-                methodStrings.add(method.toString());\n-            }\n-            return methodStrings.toString();\n-        }\n-\n-        public void addParameter(String key, String value) {\n-            if (consumerParams != null) {\n-                this.consumerParams.put(key, value);\n-            }\n-        }\n-\n-        public void addParameterIfAbsent(String key, String value) {\n-            if (consumerParams != null) {\n-                this.consumerParams.putIfAbsent(key, value);\n-            }\n-        }\n-\n-        public void addConsumerParams(Map<String, String> params) {\n-            // copy once for one service subscription\n-            if (consumerParams == null) {\n-                consumerParams = new HashMap<>(params);\n-            }\n-        }\n-\n-        public Map<String, Number> getNumbers() {\n-            // concurrent initialization is tolerant\n-            if (numbers == null) {\n-                numbers = new ConcurrentHashMap<>();\n-            }\n-            return numbers;\n-        }\n-\n-        public Map<String, Map<String, Number>> getMethodNumbers() {\n-            if (methodNumbers == null) { // concurrent initialization is tolerant\n-                methodNumbers = new ConcurrentHashMap<>();\n-            }\n-            return methodNumbers;\n-        }\n-\n-        public URL getUrl() {\n-            return url;\n-        }\n-\n-        @Override\n-        public boolean equals(Object obj) {\n-            if (obj == null) {\n-                return false;\n-            }\n-            if (!(obj instanceof ServiceInfo)) {\n-                return false;\n-            }\n-\n-            ServiceInfo serviceInfo = (ServiceInfo) obj;\n-            return this.getMatchKey().equals(serviceInfo.getMatchKey()) && this.getParams().equals(serviceInfo.getParams());\n-        }\n-\n-        @Override\n-        public int hashCode() {\n-            return Objects.hash(getMatchKey(), getParams());\n-        }\n-\n-        @Override\n-        public String toString() {\n-            return \"service{\" +\n-                    \"name='\" + name + \"',\" +\n-                    \"group='\" + group + \"',\" +\n-                    \"version='\" + version + \"',\" +\n-                    \"protocol='\" + protocol + \"',\" +\n-                    \"params=\" + params + \",\" +\n-                    \"consumerParams=\" + consumerParams +\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.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.compiler.support.ClassUtils;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\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.StringUtils;\r\n+\r\n+import java.io.Serializable;\r\n+import java.lang.reflect.Method;\r\n+import java.util.Collections;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+import java.util.SortedSet;\r\n+import java.util.TreeSet;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DOT_SEPARATOR;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPARATOR;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+public class MetadataInfo implements Serializable {\r\n+    public static String DEFAULT_REVISION = \"0\";\r\n+    private String app;\r\n+    private String revision;\r\n+    private Map<String, ServiceInfo> services;\r\n+\r\n+    // used at runtime\r\n+    private transient Map<String, String> extendParams;\r\n+    private transient AtomicBoolean reported = new AtomicBoolean(false);\r\n+\r\n+    public MetadataInfo(String app) {\r\n+        this(app, null, null);\r\n+    }\r\n+\r\n+    public MetadataInfo(String app, String revision, Map<String, ServiceInfo> services) {\r\n+        this.app = app;\r\n+        this.revision = revision;\r\n+        this.services = services == null ? new HashMap<>() : services;\r\n+        this.extendParams = new HashMap<>();\r\n+    }\r\n+\r\n+    public void addService(ServiceInfo serviceInfo) {\r\n+        if (serviceInfo == null) {\r\n+            return;\r\n+        }\r\n+        this.services.put(serviceInfo.getMatchKey(), serviceInfo);\r\n+        markChanged();\r\n+    }\r\n+\r\n+    public void removeService(ServiceInfo serviceInfo) {\r\n+        if (serviceInfo == null) {\r\n+            return;\r\n+        }\r\n+        this.services.remove(serviceInfo.getMatchKey());\r\n+        markChanged();\r\n+    }\r\n+\r\n+    public void removeService(String key) {\r\n+        if (key == null) {\r\n+            return;\r\n+        }\r\n+        this.services.remove(key);\r\n+        markChanged();\r\n+    }\r\n+\r\n+    public String calAndGetRevision() {\r\n+        if (revision != null && hasReported()) {\r\n+            return revision;\r\n+        }\r\n+\r\n+        if (CollectionUtils.isEmptyMap(services)) {\r\n+            return DEFAULT_REVISION;\r\n+        }\r\n+\r\n+        StringBuilder sb = new StringBuilder();\r\n+        sb.append(app);\r\n+        for (Map.Entry<String, ServiceInfo> entry : services.entrySet()) {\r\n+            sb.append(entry.getValue().toDescString());\r\n+        }\r\n+        this.revision = RevisionResolver.calRevision(sb.toString());\r\n+        return revision;\r\n+    }\r\n+\r\n+    public void setRevision(String revision) {\r\n+        this.revision = revision;\r\n+    }\r\n+\r\n+    public boolean hasReported() {\r\n+        return reported.get();\r\n+    }\r\n+\r\n+    public void markReported() {\r\n+        reported.compareAndSet(false, true);\r\n+    }\r\n+\r\n+    public void markChanged() {\r\n+        reported.compareAndSet(true, false);\r\n+    }\r\n+\r\n+    public String getApp() {\r\n+        return app;\r\n+    }\r\n+\r\n+    public void setApp(String app) {\r\n+        this.app = app;\r\n+    }\r\n+\r\n+    public Map<String, ServiceInfo> getServices() {\r\n+        return services;\r\n+    }\r\n+\r\n+    public void setServices(Map<String, ServiceInfo> services) {\r\n+        this.services = services;\r\n+    }\r\n+\r\n+    public ServiceInfo getServiceInfo(String serviceKey) {\r\n+        return services.get(serviceKey);\r\n+    }\r\n+\r\n+    public Map<String, String> getExtendParams() {\r\n+        return extendParams;\r\n+    }\r\n+\r\n+    public String getParameter(String key, String serviceKey) {\r\n+        ServiceInfo serviceInfo = services.get(serviceKey);\r\n+        if (serviceInfo == null) {\r\n+            return null;\r\n+        }\r\n+        return serviceInfo.getParameter(key);\r\n+    }\r\n+\r\n+    public Map<String, String> getParameters(String serviceKey) {\r\n+        ServiceInfo serviceInfo = services.get(serviceKey);\r\n+        if (serviceInfo == null) {\r\n+            return Collections.emptyMap();\r\n+        }\r\n+        return serviceInfo.getAllParams();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"metadata{\" +\r\n+                \"app='\" + app + \"',\" +\r\n+                \"revision='\" + revision + \"',\" +\r\n+                \"services=\" + services +\r\n+                \"}\";\r\n+    }\r\n+\r\n+    public static class ServiceInfo implements Serializable {\r\n+        private static ExtensionLoader<MetadataParamsFilter> loader = ExtensionLoader.getExtensionLoader(MetadataParamsFilter.class);\r\n+        private String name;\r\n+        private String group;\r\n+        private String version;\r\n+        private String protocol;\r\n+        private String path; // most of the time, path is the same with the interface name.\r\n+        private Map<String, String> params;\r\n+\r\n+        // params configured on consumer side,\r\n+        private transient Map<String, String> consumerParams;\r\n+        // cached method params\r\n+        private transient Map<String, Map<String, String>> methodParams;\r\n+        private transient Map<String, Map<String, String>> consumerMethodParams;\r\n+        // cached numbers\r\n+        private transient Map<String, Number> numbers;\r\n+        private transient Map<String, Map<String, Number>> methodNumbers;\r\n+        // service + group + version\r\n+        private transient String serviceKey;\r\n+        // service + group + version + protocol\r\n+        private transient String matchKey;\r\n+\r\n+        private transient URL url;\r\n+\r\n+        public ServiceInfo() {\r\n+        }\r\n+\r\n+        public ServiceInfo(URL url) {\r\n+            this(url.getServiceInterface(), url.getParameter(GROUP_KEY), url.getParameter(VERSION_KEY), url.getProtocol(), url.getPath(), null);\r\n+\r\n+            this.url = url;\r\n+            Map<String, String> params = new HashMap<>();\r\n+            List<MetadataParamsFilter> filters = loader.getActivateExtension(url, \"params-filter\");\r\n+            for (MetadataParamsFilter filter : filters) {\r\n+                String[] paramsIncluded = filter.serviceParamsIncluded();\r\n+                if (ArrayUtils.isNotEmpty(paramsIncluded)) {\r\n+                    for (String p : paramsIncluded) {\r\n+                        String value = url.getParameter(p);\r\n+                        if (StringUtils.isNotEmpty(value) && params.get(p) == null) {\r\n+                            params.put(p, value);\r\n+                        }\r\n+                        String[] methods = url.getParameter(METHODS_KEY, (String[]) null);\r\n+                        if (methods != null) {\r\n+                            for (String method : methods) {\r\n+                                String mValue = url.getMethodParameterStrict(method, p);\r\n+                                if (StringUtils.isNotEmpty(mValue)) {\r\n+                                    params.put(method + DOT_SEPARATOR + p, mValue);\r\n+                                }\r\n+                            }\r\n+                        }\r\n+                    }\r\n+                }\r\n+            }\r\n+            this.params = params;\r\n+        }\r\n+\r\n+        public ServiceInfo(String name, String group, String version, String protocol, String path, Map<String, String> params) {\r\n+            this.name = name;\r\n+            this.group = group;\r\n+            this.version = version;\r\n+            this.protocol = protocol;\r\n+            this.path = path;\r\n+            this.params = params == null ? new HashMap<>() : params;\r\n+\r\n+            this.serviceKey = URL.buildKey(name, group, version);\r\n+            this.matchKey = buildMatchKey();\r\n+        }\r\n+\r\n+        public String getMatchKey() {\r\n+            if (matchKey != null) {\r\n+                return matchKey;\r\n+            }\r\n+            buildMatchKey();\r\n+            return matchKey;\r\n+        }\r\n+\r\n+        private String buildMatchKey() {\r\n+            matchKey = getServiceKey();\r\n+            if (StringUtils.isNotEmpty(protocol)) {\r\n+                matchKey = getServiceKey() + GROUP_CHAR_SEPARATOR + protocol;\r\n+            }\r\n+            return matchKey;\r\n+        }\r\n+\r\n+        public String getServiceKey() {\r\n+            if (serviceKey != null) {\r\n+                return serviceKey;\r\n+            }\r\n+            this.serviceKey = URL.buildKey(name, group, version);\r\n+            return serviceKey;\r\n+        }\r\n+\r\n+        public String getName() {\r\n+            return name;\r\n+        }\r\n+\r\n+        public void setName(String name) {\r\n+            this.name = name;\r\n+        }\r\n+\r\n+        public String getGroup() {\r\n+            return group;\r\n+        }\r\n+\r\n+        public void setGroup(String group) {\r\n+            this.group = group;\r\n+        }\r\n+\r\n+        public String getVersion() {\r\n+            return version;\r\n+        }\r\n+\r\n+        public void setVersion(String version) {\r\n+            this.version = version;\r\n+        }\r\n+\r\n+        public String getPath() {\r\n+            return path;\r\n+        }\r\n+\r\n+        public void setPath(String path) {\r\n+            this.path = path;\r\n+        }\r\n+\r\n+        public Map<String, String> getParams() {\r\n+            if (params == null) {\r\n+                return Collections.emptyMap();\r\n+            }\r\n+            return params;\r\n+        }\r\n+\r\n+        public void setParams(Map<String, String> params) {\r\n+            this.params = params;\r\n+        }\r\n+\r\n+        public Map<String, String> getAllParams() {\r\n+            if (consumerParams != null) {\r\n+                Map<String, String> allParams = new HashMap<>((int) ((params.size() + consumerParams.size()) / 0.75f + 1));\r\n+                allParams.putAll(params);\r\n+                allParams.putAll(consumerParams);\r\n+                return allParams;\r\n+            }\r\n+            return params;\r\n+        }\r\n+\r\n+        public String getParameter(String key) {\r\n+            if (consumerParams != null) {\r\n+                String value = consumerParams.get(key);\r\n+                if (value != null) {\r\n+                    return value;\r\n+                }\r\n+            }\r\n+            return params.get(key);\r\n+        }\r\n+\r\n+        public String getMethodParameter(String method, String key, String defaultValue) {\r\n+            if (methodParams == null) {\r\n+                methodParams = URL.toMethodParameters(params);\r\n+                consumerMethodParams = URL.toMethodParameters(consumerParams);\r\n+            }\r\n+\r\n+            String value = getMethodParameter(method, key, consumerMethodParams);\r\n+            if (value != null) {\r\n+                return value;\r\n+            }\r\n+            value = getMethodParameter(method, key, methodParams);\r\n+            return value == null ? defaultValue : value;\r\n+        }\r\n+\r\n+        private String getMethodParameter(String method, String key, Map<String, Map<String, String>> map) {\r\n+            Map<String, String> keyMap = map.get(method);\r\n+            String value = null;\r\n+            if (keyMap != null) {\r\n+                value = keyMap.get(key);\r\n+            }\r\n+            if (StringUtils.isEmpty(value)) {\r\n+                value = getParameter(key);\r\n+            }\r\n+            return value;\r\n+        }\r\n+\r\n+        public boolean hasMethodParameter(String method, String key) {\r\n+            String value = this.getMethodParameter(method, key, (String) null);\r\n+            return StringUtils.isNotEmpty(value);\r\n+        }\r\n+\r\n+        public boolean hasMethodParameter(String method) {\r\n+            if (methodParams == null) {\r\n+                methodParams = URL.toMethodParameters(params);\r\n+                consumerMethodParams = URL.toMethodParameters(consumerParams);\r\n+            }\r\n+\r\n+            return consumerMethodParams.containsKey(method) || methodParams.containsKey(method);\r\n+        }\r\n+\r\n+        public String toDescString() {\r\n+            return this.getMatchKey() + getMethodSignaturesString() + getParams();\r\n+        }\r\n+\r\n+        private String getMethodSignaturesString() {\r\n+            SortedSet<String> methodStrings = new TreeSet();\r\n+\r\n+            Method[] methods = ClassUtils.forName(name).getMethods();\r\n+            for (Method method : methods) {\r\n+                methodStrings.add(method.toString());\r\n+            }\r\n+            return methodStrings.toString();\r\n+        }\r\n+\r\n+        public void addParameter(String key, String value) {\r\n+            if (consumerParams != null) {\r\n+                this.consumerParams.put(key, value);\r\n+            }\r\n+        }\r\n+\r\n+        public void addParameterIfAbsent(String key, String value) {\r\n+            if (consumerParams != null) {\r\n+                this.consumerParams.putIfAbsent(key, value);\r\n+            }\r\n+        }\r\n+\r\n+        public void addConsumerParams(Map<String, String> params) {\r\n+            // copy once for one service subscription\r\n+            if (consumerParams == null) {\r\n+                consumerParams = new HashMap<>(params);\r\n+            }\r\n+        }\r\n+\r\n+        public Map<String, Number> getNumbers() {\r\n+            // concurrent initialization is tolerant\r\n+            if (numbers == null) {\r\n+                numbers = new ConcurrentHashMap<>();\r\n+            }\r\n+            return numbers;\r\n+        }\r\n+\r\n+        public Map<String, Map<String, Number>> getMethodNumbers() {\r\n+            if (methodNumbers == null) { // concurrent initialization is tolerant\r\n+                methodNumbers = new ConcurrentHashMap<>();\r\n+            }\r\n+            return methodNumbers;\r\n+        }\r\n+\r\n+        public URL getUrl() {\r\n+            return url;\r\n+        }\r\n+\r\n+        @Override\r\n+        public boolean equals(Object obj) {\r\n+            if (obj == null) {\r\n+                return false;\r\n+            }\r\n+            if (!(obj instanceof ServiceInfo)) {\r\n+                return false;\r\n+            }\r\n+\r\n+            ServiceInfo serviceInfo = (ServiceInfo) obj;\r\n+            return this.getMatchKey().equals(serviceInfo.getMatchKey()) && this.getParams().equals(serviceInfo.getParams());\r\n+        }\r\n+\r\n+        @Override\r\n+        public int hashCode() {\r\n+            return Objects.hash(getMatchKey(), getParams());\r\n+        }\r\n+\r\n+        @Override\r\n+        public String toString() {\r\n+            return \"service{\" +\r\n+                    \"name='\" + name + \"',\" +\r\n+                    \"group='\" + group + \"',\" +\r\n+                    \"version='\" + version + \"',\" +\r\n+                    \"protocol='\" + protocol + \"',\" +\r\n+                    \"params=\" + params + \",\" +\r\n+                    \"consumerParams=\" + consumerParams +\r\n+                    \"}\";\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataParamsFilter.java", "source2": "org/apache/dubbo/metadata/MetadataParamsFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,37 +1,37 @@\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.metadata;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-@SPI\n-public interface MetadataParamsFilter {\n-\n-   /**\n-    * params that need to be sent to metadata center\n-    *\n-    * @return arrays of keys\n-    */\n-   String[] serviceParamsIncluded();\n-\n-   /**\n-    * params that need to be sent to registry center\n-    *\n-    * @return arrays of keys\n-    */\n-   String[] instanceParamsIncluded();\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.metadata;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+@SPI\r\n+public interface MetadataParamsFilter {\r\n+\r\n+   /**\r\n+    * params that need to be sent to metadata center\r\n+    *\r\n+    * @return arrays of keys\r\n+    */\r\n+   String[] serviceParamsIncluded();\r\n+\r\n+   /**\r\n+    * params that need to be sent to registry center\r\n+    *\r\n+    * @return arrays of keys\r\n+    */\r\n+   String[] instanceParamsIncluded();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataService.java", "source2": "org/apache/dubbo/metadata/MetadataService.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.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.SortedSet;\n-import java.util.TreeSet;\n-import java.util.stream.Collectors;\n-import java.util.stream.Stream;\n-import java.util.stream.StreamSupport;\n-\n-import static java.util.Collections.unmodifiableSortedSet;\n-import static java.util.stream.StreamSupport.stream;\n-import static org.apache.dubbo.common.URL.buildKey;\n-\n-/**\n- * A framework interface of Dubbo Metadata Service defines the contract of Dubbo Services registration and subscription\n- * between Dubbo service providers and its consumers. The implementation will be exported as a normal Dubbo service that\n- * the clients would subscribe, whose version comes from the {@link #version()} method and group gets from\n- * {@link #serviceName()}, that means, The different Dubbo service(application) will export the different\n- * {@link MetadataService} that persists all the exported and subscribed metadata, they are present by\n- * {@link #getExportedURLs()} and {@link #getSubscribedURLs()} respectively. What's more, {@link MetadataService}\n- * also providers the fine-grain methods for the precise queries.\n- *\n- * @see WritableMetadataService\n- * @since 2.7.5\n- */\n-public interface MetadataService {\n-\n-    //FIXME the value is default, it was used by testing temporarily\n-    static final String DEFAULT_EXTENSION = \"default\";\n-\n-    /**\n-     * The value of all service names\n-     */\n-    String ALL_SERVICE_NAMES = \"*\";\n-\n-    /**\n-     * The value of All service instances\n-     */\n-    String ALL_SERVICE_INTERFACES = \"*\";\n-\n-    /**\n-     * The service interface name of {@link MetadataService}\n-     */\n-    String SERVICE_INTERFACE_NAME = MetadataService.class.getName();\n-\n-    /**\n-     * The contract version of {@link MetadataService}, the future update must make sure compatible.\n-     */\n-    String VERSION = \"1.0.0\";\n-\n-    /**\n-     * Gets the current Dubbo Service name\n-     *\n-     * @return non-null\n-     */\n-    String serviceName();\n-\n-    /**\n-     * Gets the version of {@link MetadataService} that always equals {@link #VERSION}\n-     *\n-     * @return non-null\n-     * @see #VERSION\n-     */\n-    default String version() {\n-        return VERSION;\n-    }\n-\n-    /**\n-     * the list of String that presents all Dubbo subscribed {@link URL urls}\n-     *\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getSubscribedURLs() {\n-        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\n-    }\n-\n-    /**\n-     * Get the {@link SortedSet sorted set} of String that presents all Dubbo exported {@link URL urls}\n-     *\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getExportedURLs() {\n-        return getExportedURLs(ALL_SERVICE_INTERFACES);\n-    }\n-\n-    /**\n-     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the <code>serviceInterface</code>\n-     *\n-     * @param serviceInterface The class name of Dubbo service interface\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getExportedURLs(String serviceInterface) {\n-        return getExportedURLs(serviceInterface, null);\n-    }\n-\n-    /**\n-     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the\n-     * <code>serviceInterface</code> and <code>group</code>\n-     *\n-     * @param serviceInterface The class name of Dubbo service interface\n-     * @param group            the Dubbo Service Group (optional)\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getExportedURLs(String serviceInterface, String group) {\n-        return getExportedURLs(serviceInterface, group, null);\n-    }\n-\n-    /**\n-     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the\n-     * <code>serviceInterface</code>, <code>group</code> and <code>version</code>\n-     *\n-     * @param serviceInterface The class name of Dubbo service interface\n-     * @param group            the Dubbo Service Group (optional)\n-     * @param version          the Dubbo Service Version (optional)\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    default SortedSet<String> getExportedURLs(String serviceInterface, String group, String version) {\n-        return getExportedURLs(serviceInterface, group, version, null);\n-    }\n-\n-    /**\n-     * Get the sorted set of String that presents the specified Dubbo exported {@link URL urls} by the\n-     * <code>serviceInterface</code>, <code>group</code>, <code>version</code> and <code>protocol</code>\n-     *\n-     * @param serviceInterface The class name of Dubbo service interface\n-     * @param group            the Dubbo Service Group (optional)\n-     * @param version          the Dubbo Service Version (optional)\n-     * @param protocol         the Dubbo Service Protocol (optional)\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\n-     * @see #toSortedStrings(Stream)\n-     * @see URL#toFullString()\n-     */\n-    SortedSet<String> getExportedURLs(String serviceInterface, String group, String version, String protocol);\n-\n-    /**\n-     * Interface definition.\n-     *\n-     * @return\n-     */\n-    default String getServiceDefinition(String interfaceName, String version, String group) {\n-        return getServiceDefinition(buildKey(interfaceName, group, version));\n-    }\n-\n-    /**\n-     * Interface definition.\n-     *\n-     * @return\n-     */\n-    String getServiceDefinition(String serviceKey);\n-\n-    MetadataInfo getMetadataInfo(String revision);\n-\n-    Map<String, MetadataInfo> getMetadataInfos();\n-\n-    /**\n-     * Is the {@link URL} for the {@link MetadataService} or not?\n-     *\n-     * @param url {@link URL url}\n-     * @return\n-     */\n-    static boolean isMetadataServiceURL(URL url) {\n-        String serviceInterface = url.getServiceInterface();\n-        return SERVICE_INTERFACE_NAME.equals(serviceInterface);\n-    }\n-\n-    /**\n-     * Convert the multiple {@link URL urls} to a {@link List list} of {@link URL urls}\n-     *\n-     * @param urls the strings presents the {@link URL Dubbo URLs}\n-     * @return non-null\n-     */\n-    static List<URL> toURLs(Iterable<String> urls) {\n-        return stream(urls.spliterator(), false)\n-                .map(URL::valueOf)\n-                .collect(Collectors.toList());\n-    }\n-\n-    /**\n-     * Convert the specified {@link Iterable} of {@link URL URLs} to be the {@link URL#toFullString() strings} presenting\n-     * the {@link URL URLs}\n-     *\n-     * @param iterable {@link Iterable} of {@link URL}\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting\n-     * @see URL#toFullString()\n-     */\n-    static SortedSet<String> toSortedStrings(Iterable<URL> iterable) {\n-        return toSortedStrings(StreamSupport.stream(iterable.spliterator(), false));\n-    }\n-\n-    /**\n-     * Convert the specified {@link Stream} of {@link URL URLs} to be the {@link URL#toFullString() strings} presenting\n-     * the {@link URL URLs}\n-     *\n-     * @param stream {@link Stream} of {@link URL}\n-     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting\n-     * @see URL#toFullString()\n-     */\n-    static SortedSet<String> toSortedStrings(Stream<URL> stream) {\n-        return unmodifiableSortedSet(stream.map(URL::toFullString).collect(TreeSet::new, Set::add, Set::addAll));\n-    }\n-\n-    /**\n-     * Export Metadata in Service Instance of Service Discovery\n-     * <p>\n-     * Used for consumer to get Service Instance Metadata\n-     * if Registry is unsupported with publishing metadata\n-     *\n-     * @param metadata {@link Map} of provider Service Instance Metadata\n-     * @since 3.0\n-     */\n-    default void exportServiceDiscoveryMetadata(String metadata) {\n-        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\n-    }\n-\n-    /**\n-     * Get all Metadata listener from local\n-     * <p>\n-     * Used for consumer to get Service Instance Metadata\n-     * if Registry is unsupported with publishing metadata\n-     *\n-     * @return {@link Map} of {@link MetadataChangeListener}\n-     * @since 3.0\n-     */\n-    default Map<String, MetadataChangeListener> getMetadataChangeListenerMap() {\n-        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\n-    }\n-\n-    /**\n-     * 1. Fetch Metadata in Service Instance of Service Discovery\n-     * 2. Add a metadata change listener\n-     * <p>\n-     * Used for consumer to get Service Instance Metadata\n-     * if Registry is unsupported with publishing metadata\n-     *\n-     * @param consumerId consumerId\n-     * @param listener   {@link MetadataChangeListener} used to notify event\n-     * @return {@link Map} of provider Service Instance Metadata\n-     * @since 3.0\n-     */\n-    default String getAndListenServiceDiscoveryMetadata(String consumerId, MetadataChangeListener listener) {\n-        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\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.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.SortedSet;\r\n+import java.util.TreeSet;\r\n+import java.util.stream.Collectors;\r\n+import java.util.stream.Stream;\r\n+import java.util.stream.StreamSupport;\r\n+\r\n+import static java.util.Collections.unmodifiableSortedSet;\r\n+import static java.util.stream.StreamSupport.stream;\r\n+import static org.apache.dubbo.common.URL.buildKey;\r\n+\r\n+/**\r\n+ * A framework interface of Dubbo Metadata Service defines the contract of Dubbo Services registration and subscription\r\n+ * between Dubbo service providers and its consumers. The implementation will be exported as a normal Dubbo service that\r\n+ * the clients would subscribe, whose version comes from the {@link #version()} method and group gets from\r\n+ * {@link #serviceName()}, that means, The different Dubbo service(application) will export the different\r\n+ * {@link MetadataService} that persists all the exported and subscribed metadata, they are present by\r\n+ * {@link #getExportedURLs()} and {@link #getSubscribedURLs()} respectively. What's more, {@link MetadataService}\r\n+ * also providers the fine-grain methods for the precise queries.\r\n+ *\r\n+ * @see WritableMetadataService\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface MetadataService {\r\n+\r\n+    //FIXME the value is default, it was used by testing temporarily\r\n+    static final String DEFAULT_EXTENSION = \"default\";\r\n+\r\n+    /**\r\n+     * The value of all service names\r\n+     */\r\n+    String ALL_SERVICE_NAMES = \"*\";\r\n+\r\n+    /**\r\n+     * The value of All service instances\r\n+     */\r\n+    String ALL_SERVICE_INTERFACES = \"*\";\r\n+\r\n+    /**\r\n+     * The service interface name of {@link MetadataService}\r\n+     */\r\n+    String SERVICE_INTERFACE_NAME = MetadataService.class.getName();\r\n+\r\n+    /**\r\n+     * The contract version of {@link MetadataService}, the future update must make sure compatible.\r\n+     */\r\n+    String VERSION = \"1.0.0\";\r\n+\r\n+    /**\r\n+     * Gets the current Dubbo Service name\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    String serviceName();\r\n+\r\n+    /**\r\n+     * Gets the version of {@link MetadataService} that always equals {@link #VERSION}\r\n+     *\r\n+     * @return non-null\r\n+     * @see #VERSION\r\n+     */\r\n+    default String version() {\r\n+        return VERSION;\r\n+    }\r\n+\r\n+    /**\r\n+     * the list of String that presents all Dubbo subscribed {@link URL urls}\r\n+     *\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getSubscribedURLs() {\r\n+        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link SortedSet sorted set} of String that presents all Dubbo exported {@link URL urls}\r\n+     *\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getExportedURLs() {\r\n+        return getExportedURLs(ALL_SERVICE_INTERFACES);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the <code>serviceInterface</code>\r\n+     *\r\n+     * @param serviceInterface The class name of Dubbo service interface\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getExportedURLs(String serviceInterface) {\r\n+        return getExportedURLs(serviceInterface, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the\r\n+     * <code>serviceInterface</code> and <code>group</code>\r\n+     *\r\n+     * @param serviceInterface The class name of Dubbo service interface\r\n+     * @param group            the Dubbo Service Group (optional)\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getExportedURLs(String serviceInterface, String group) {\r\n+        return getExportedURLs(serviceInterface, group, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link SortedSet sorted set} of String that presents the specified Dubbo exported {@link URL urls} by the\r\n+     * <code>serviceInterface</code>, <code>group</code> and <code>version</code>\r\n+     *\r\n+     * @param serviceInterface The class name of Dubbo service interface\r\n+     * @param group            the Dubbo Service Group (optional)\r\n+     * @param version          the Dubbo Service Version (optional)\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    default SortedSet<String> getExportedURLs(String serviceInterface, String group, String version) {\r\n+        return getExportedURLs(serviceInterface, group, version, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the sorted set of String that presents the specified Dubbo exported {@link URL urls} by the\r\n+     * <code>serviceInterface</code>, <code>group</code>, <code>version</code> and <code>protocol</code>\r\n+     *\r\n+     * @param serviceInterface The class name of Dubbo service interface\r\n+     * @param group            the Dubbo Service Group (optional)\r\n+     * @param version          the Dubbo Service Version (optional)\r\n+     * @param protocol         the Dubbo Service Protocol (optional)\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting the {@link URL URLs}\r\n+     * @see #toSortedStrings(Stream)\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    SortedSet<String> getExportedURLs(String serviceInterface, String group, String version, String protocol);\r\n+\r\n+    /**\r\n+     * Interface definition.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    default String getServiceDefinition(String interfaceName, String version, String group) {\r\n+        return getServiceDefinition(buildKey(interfaceName, group, version));\r\n+    }\r\n+\r\n+    /**\r\n+     * Interface definition.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    String getServiceDefinition(String serviceKey);\r\n+\r\n+    MetadataInfo getMetadataInfo(String revision);\r\n+\r\n+    Map<String, MetadataInfo> getMetadataInfos();\r\n+\r\n+    /**\r\n+     * Is the {@link URL} for the {@link MetadataService} or not?\r\n+     *\r\n+     * @param url {@link URL url}\r\n+     * @return\r\n+     */\r\n+    static boolean isMetadataServiceURL(URL url) {\r\n+        String serviceInterface = url.getServiceInterface();\r\n+        return SERVICE_INTERFACE_NAME.equals(serviceInterface);\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the multiple {@link URL urls} to a {@link List list} of {@link URL urls}\r\n+     *\r\n+     * @param urls the strings presents the {@link URL Dubbo URLs}\r\n+     * @return non-null\r\n+     */\r\n+    static List<URL> toURLs(Iterable<String> urls) {\r\n+        return stream(urls.spliterator(), false)\r\n+                .map(URL::valueOf)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the specified {@link Iterable} of {@link URL URLs} to be the {@link URL#toFullString() strings} presenting\r\n+     * the {@link URL URLs}\r\n+     *\r\n+     * @param iterable {@link Iterable} of {@link URL}\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    static SortedSet<String> toSortedStrings(Iterable<URL> iterable) {\r\n+        return toSortedStrings(StreamSupport.stream(iterable.spliterator(), false));\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the specified {@link Stream} of {@link URL URLs} to be the {@link URL#toFullString() strings} presenting\r\n+     * the {@link URL URLs}\r\n+     *\r\n+     * @param stream {@link Stream} of {@link URL}\r\n+     * @return the non-null read-only {@link SortedSet sorted set} of {@link URL#toFullString() strings} presenting\r\n+     * @see URL#toFullString()\r\n+     */\r\n+    static SortedSet<String> toSortedStrings(Stream<URL> stream) {\r\n+        return unmodifiableSortedSet(stream.map(URL::toFullString).collect(TreeSet::new, Set::add, Set::addAll));\r\n+    }\r\n+\r\n+    /**\r\n+     * Export Metadata in Service Instance of Service Discovery\r\n+     * <p>\r\n+     * Used for consumer to get Service Instance Metadata\r\n+     * if Registry is unsupported with publishing metadata\r\n+     *\r\n+     * @param metadata {@link Map} of provider Service Instance Metadata\r\n+     * @since 3.0\r\n+     */\r\n+    default void exportServiceDiscoveryMetadata(String metadata) {\r\n+        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all Metadata listener from local\r\n+     * <p>\r\n+     * Used for consumer to get Service Instance Metadata\r\n+     * if Registry is unsupported with publishing metadata\r\n+     *\r\n+     * @return {@link Map} of {@link MetadataChangeListener}\r\n+     * @since 3.0\r\n+     */\r\n+    default Map<String, MetadataChangeListener> getMetadataChangeListenerMap() {\r\n+        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\r\n+    }\r\n+\r\n+    /**\r\n+     * 1. Fetch Metadata in Service Instance of Service Discovery\r\n+     * 2. Add a metadata change listener\r\n+     * <p>\r\n+     * Used for consumer to get Service Instance Metadata\r\n+     * if Registry is unsupported with publishing metadata\r\n+     *\r\n+     * @param consumerId consumerId\r\n+     * @param listener   {@link MetadataChangeListener} used to notify event\r\n+     * @return {@link Map} of provider Service Instance Metadata\r\n+     * @since 3.0\r\n+     */\r\n+    default String getAndListenServiceDiscoveryMetadata(String consumerId, MetadataChangeListener listener) {\r\n+        throw new UnsupportedOperationException(\"This operation is not supported for consumer.\");\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataServiceExporter.java", "source2": "org/apache/dubbo/metadata/MetadataServiceExporter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,100 +1,100 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-\n-import java.util.List;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-\n-/**\n- * The exporter of {@link MetadataService}\n- *\n- * @see MetadataService\n- * @see #export()\n- * @see #unexport()\n- * @since 2.7.5\n- */\n-@SPI(DEFAULT_METADATA_STORAGE_TYPE)\n-public interface MetadataServiceExporter extends Prioritized {\n-\n-    /**\n-     * Exports the {@link MetadataService} as a Dubbo service\n-     *\n-     * @return {@link MetadataServiceExporter itself}\n-     */\n-    MetadataServiceExporter export();\n-\n-    /**\n-     * Unexports the {@link MetadataService}\n-     *\n-     * @return {@link MetadataServiceExporter itself}\n-     */\n-    MetadataServiceExporter unexport();\n-\n-    /**\n-     * Get the {@link URL URLs} that were exported\n-     *\n-     * @return non-null\n-     */\n-    List<URL> getExportedURLs();\n-\n-    /**\n-     * {@link MetadataService} is export or not\n-     *\n-     * @return if {@link #export()} was executed, return <code>true</code>, or <code>false</code>\n-     */\n-    boolean isExported();\n-\n-    /**\n-     * Does current implementation support the specified metadata type?\n-     *\n-     * @param metadataType the specified metadata type\n-     * @return If supports, return <code>true</code>, or <code>false</code>\n-     * @since 2.7.8\n-     */\n-    default boolean supports(String metadataType) {\n-        return true;\n-    }\n-\n-    /**\n-     * Get the extension of {@link MetadataServiceExporter} by the type.\n-     * If not found, return the default implementation\n-     *\n-     * @param metadataType the metadata type\n-     * @return non-null\n-     * @since 2.7.8\n-     */\n-    static MetadataServiceExporter getExtension(String metadataType) {\n-        return getExtensionLoader(MetadataServiceExporter.class).getOrDefaultExtension(metadataType);\n-    }\n-\n-    /**\n-     * Get the default extension of {@link MetadataServiceExporter}\n-     *\n-     * @return non-null\n-     * @since 2.7.8\n-     */\n-    static MetadataServiceExporter getDefaultExtension() {\n-        return getExtension(DEFAULT_METADATA_STORAGE_TYPE);\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.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+\r\n+import java.util.List;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+\r\n+/**\r\n+ * The exporter of {@link MetadataService}\r\n+ *\r\n+ * @see MetadataService\r\n+ * @see #export()\r\n+ * @see #unexport()\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI(DEFAULT_METADATA_STORAGE_TYPE)\r\n+public interface MetadataServiceExporter extends Prioritized {\r\n+\r\n+    /**\r\n+     * Exports the {@link MetadataService} as a Dubbo service\r\n+     *\r\n+     * @return {@link MetadataServiceExporter itself}\r\n+     */\r\n+    MetadataServiceExporter export();\r\n+\r\n+    /**\r\n+     * Unexports the {@link MetadataService}\r\n+     *\r\n+     * @return {@link MetadataServiceExporter itself}\r\n+     */\r\n+    MetadataServiceExporter unexport();\r\n+\r\n+    /**\r\n+     * Get the {@link URL URLs} that were exported\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    List<URL> getExportedURLs();\r\n+\r\n+    /**\r\n+     * {@link MetadataService} is export or not\r\n+     *\r\n+     * @return if {@link #export()} was executed, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean isExported();\r\n+\r\n+    /**\r\n+     * Does current implementation support the specified metadata type?\r\n+     *\r\n+     * @param metadataType the specified metadata type\r\n+     * @return If supports, return <code>true</code>, or <code>false</code>\r\n+     * @since 2.7.8\r\n+     */\r\n+    default boolean supports(String metadataType) {\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the extension of {@link MetadataServiceExporter} by the type.\r\n+     * If not found, return the default implementation\r\n+     *\r\n+     * @param metadataType the metadata type\r\n+     * @return non-null\r\n+     * @since 2.7.8\r\n+     */\r\n+    static MetadataServiceExporter getExtension(String metadataType) {\r\n+        return getExtensionLoader(MetadataServiceExporter.class).getOrDefaultExtension(metadataType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the default extension of {@link MetadataServiceExporter}\r\n+     *\r\n+     * @return non-null\r\n+     * @since 2.7.8\r\n+     */\r\n+    static MetadataServiceExporter getDefaultExtension() {\r\n+        return getExtension(DEFAULT_METADATA_STORAGE_TYPE);\r\n+    }\r\n+}\r\n+\r\n"}, {"source1": "org/apache/dubbo/metadata/MetadataServiceType.java", "source2": "org/apache/dubbo/metadata/MetadataServiceType.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.metadata;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;\n-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;\n-\n-/**\n- * The type enumerations of {@link MetadataService}\n- *\n- * @see MetadataService\n- * @since 2.7.8\n- */\n-public enum MetadataServiceType {\n-\n-    /**\n-     * The default type of {@link MetadataService}\n-     */\n-    DEFAULT(DEFAULT_METADATA_STORAGE_TYPE),\n-\n-    /**\n-     * The remote type of {@link MetadataService}\n-     */\n-    REMOTE(REMOTE_METADATA_STORAGE_TYPE),\n-\n-    /**\n-     * The composite type of {@link MetadataService}\n-     */\n-    COMPOSITE(COMPOSITE_METADATA_STORAGE_TYPE);\n-\n-    /**\n-     * The {@link String} value of type\n-     */\n-    private final String value;\n-\n-    MetadataServiceType(String value) {\n-        this.value = value;\n-    }\n-\n-    public String getValue() {\n-        return value;\n-    }\n-\n-    public static MetadataServiceType getOrDefault(String value) {\n-        MetadataServiceType targetType = null;\n-        for (MetadataServiceType type : values()) {\n-            if (type.getValue().equals(value)) {\n-                targetType = type;\n-                break;\n-            }\n-        }\n-        if (targetType == null) {\n-            targetType = DEFAULT;\n-        }\n-        return targetType;\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.metadata;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;\r\n+\r\n+/**\r\n+ * The type enumerations of {@link MetadataService}\r\n+ *\r\n+ * @see MetadataService\r\n+ * @since 2.7.8\r\n+ */\r\n+public enum MetadataServiceType {\r\n+\r\n+    /**\r\n+     * The default type of {@link MetadataService}\r\n+     */\r\n+    DEFAULT(DEFAULT_METADATA_STORAGE_TYPE),\r\n+\r\n+    /**\r\n+     * The remote type of {@link MetadataService}\r\n+     */\r\n+    REMOTE(REMOTE_METADATA_STORAGE_TYPE),\r\n+\r\n+    /**\r\n+     * The composite type of {@link MetadataService}\r\n+     */\r\n+    COMPOSITE(COMPOSITE_METADATA_STORAGE_TYPE);\r\n+\r\n+    /**\r\n+     * The {@link String} value of type\r\n+     */\r\n+    private final String value;\r\n+\r\n+    MetadataServiceType(String value) {\r\n+        this.value = value;\r\n+    }\r\n+\r\n+    public String getValue() {\r\n+        return value;\r\n+    }\r\n+\r\n+    public static MetadataServiceType getOrDefault(String value) {\r\n+        MetadataServiceType targetType = null;\r\n+        for (MetadataServiceType type : values()) {\r\n+            if (type.getValue().equals(value)) {\r\n+                targetType = type;\r\n+                break;\r\n+            }\r\n+        }\r\n+        if (targetType == null) {\r\n+            targetType = DEFAULT;\r\n+        }\r\n+        return targetType;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/RevisionResolver.java", "source2": "org/apache/dubbo/metadata/RevisionResolver.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-package org.apache.dubbo.metadata;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-\n-import java.security.MessageDigest;\n-import java.security.NoSuchAlgorithmException;\n-\n-import static java.nio.charset.StandardCharsets.UTF_8;\n-\n-public class RevisionResolver {\n-    private static final Logger logger = LoggerFactory.getLogger(RevisionResolver.class);\n-    private static char hexDigits[] = {\n-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'\n-    };\n-\n-    private static MessageDigest mdInst;\n-\n-    static {\n-        try {\n-            mdInst = MessageDigest.getInstance(\"MD5\");\n-        } catch (NoSuchAlgorithmException e) {\n-            logger.error(\"Failed to calculate metadata revision\", e);\n-        }\n-    }\n-\n-    public static String calRevision(String metadata) {\n-        mdInst.update(metadata.getBytes(UTF_8));\n-        byte[] md5 = mdInst.digest();\n-\n-        int j = md5.length;\n-        char str[] = new char[j * 2];\n-        int k = 0;\n-        for (int i = 0; i < j; i++) {\n-            byte byte0 = md5[i];\n-            str[k++] = hexDigits[byte0 >>> 4 & 0xf];\n-            str[k++] = hexDigits[byte0 & 0xf];\n-        }\n-        return new String(str);\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.metadata;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+\r\n+import java.security.MessageDigest;\r\n+import java.security.NoSuchAlgorithmException;\r\n+\r\n+import static java.nio.charset.StandardCharsets.UTF_8;\r\n+\r\n+public class RevisionResolver {\r\n+    private static final Logger logger = LoggerFactory.getLogger(RevisionResolver.class);\r\n+    private static char hexDigits[] = {\r\n+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'\r\n+    };\r\n+\r\n+    private static MessageDigest mdInst;\r\n+\r\n+    static {\r\n+        try {\r\n+            mdInst = MessageDigest.getInstance(\"MD5\");\r\n+        } catch (NoSuchAlgorithmException e) {\r\n+            logger.error(\"Failed to calculate metadata revision\", e);\r\n+        }\r\n+    }\r\n+\r\n+    public static String calRevision(String metadata) {\r\n+        mdInst.update(metadata.getBytes(UTF_8));\r\n+        byte[] md5 = mdInst.digest();\r\n+\r\n+        int j = md5.length;\r\n+        char str[] = new char[j * 2];\r\n+        int k = 0;\r\n+        for (int i = 0; i < j; i++) {\r\n+            byte byte0 = md5[i];\r\n+            str[k++] = hexDigits[byte0 >>> 4 & 0xf];\r\n+            str[k++] = hexDigits[byte0 & 0xf];\r\n+        }\r\n+        return new String(str);\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/ServiceNameMapping.java", "source2": "org/apache/dubbo/metadata/ServiceNameMapping.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.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.Set;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_MAPPING_TYPE;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.common.utils.StringUtils.SLASH;\n-import static org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping.DEFAULT_MAPPING_GROUP;\n-\n-/**\n- * The interface for Dubbo service name Mapping\n- *\n- * @since 2.7.5\n- */\n-@SPI(\"config\")\n-public interface ServiceNameMapping {\n-\n-    /**\n-     * Map the specified Dubbo service interface, group, version and protocol to current Dubbo service name\n-     */\n-    void map(URL url);\n-\n-    /**\n-     * Get the service names from the specified Dubbo service interface, group, version and protocol\n-     *\n-     * @return\n-     */\n-    Set<String> getAndListen(URL url, MappingListener mappingListener);\n-\n-    /**\n-     * Get the default extension of {@link ServiceNameMapping}\n-     *\n-     * @return non-null {@link ServiceNameMapping}\n-     * @see DynamicConfigurationServiceNameMapping\n-     */\n-    static ServiceNameMapping getDefaultExtension() {\n-        return getExtensionLoader(ServiceNameMapping.class).getDefaultExtension();\n-    }\n-\n-    static ServiceNameMapping getExtension(String name) {\n-        return getExtensionLoader(ServiceNameMapping.class).getExtension(name == null ? CONFIG_MAPPING_TYPE : name);\n-    }\n-\n-    static String buildGroup(String serviceInterface, String group, String version, String protocol) {\n-        //        the issue : https://github.com/apache/dubbo/issues/4671\n-        //        StringBuilder groupBuilder = new StringBuilder(serviceInterface)\n-        //                .append(KEY_SEPARATOR).append(defaultString(group))\n-        //                .append(KEY_SEPARATOR).append(defaultString(version))\n-        //                .append(KEY_SEPARATOR).append(defaultString(protocol));\n-        //        return groupBuilder.toString();\n-        return DEFAULT_MAPPING_GROUP + SLASH + serviceInterface;\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.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.Set;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_MAPPING_TYPE;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.common.utils.StringUtils.SLASH;\r\n+import static org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping.DEFAULT_MAPPING_GROUP;\r\n+\r\n+/**\r\n+ * The interface for Dubbo service name Mapping\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI(\"config\")\r\n+public interface ServiceNameMapping {\r\n+\r\n+    /**\r\n+     * Map the specified Dubbo service interface, group, version and protocol to current Dubbo service name\r\n+     */\r\n+    void map(URL url);\r\n+\r\n+    /**\r\n+     * Get the service names from the specified Dubbo service interface, group, version and protocol\r\n+     *\r\n+     * @return\r\n+     */\r\n+    Set<String> getAndListen(URL url, MappingListener mappingListener);\r\n+\r\n+    /**\r\n+     * Get the default extension of {@link ServiceNameMapping}\r\n+     *\r\n+     * @return non-null {@link ServiceNameMapping}\r\n+     * @see DynamicConfigurationServiceNameMapping\r\n+     */\r\n+    static ServiceNameMapping getDefaultExtension() {\r\n+        return getExtensionLoader(ServiceNameMapping.class).getDefaultExtension();\r\n+    }\r\n+\r\n+    static ServiceNameMapping getExtension(String name) {\r\n+        return getExtensionLoader(ServiceNameMapping.class).getExtension(name == null ? CONFIG_MAPPING_TYPE : name);\r\n+    }\r\n+\r\n+    static String buildGroup(String serviceInterface, String group, String version, String protocol) {\r\n+        //        the issue : https://github.com/apache/dubbo/issues/4671\r\n+        //        StringBuilder groupBuilder = new StringBuilder(serviceInterface)\r\n+        //                .append(KEY_SEPARATOR).append(defaultString(group))\r\n+        //                .append(KEY_SEPARATOR).append(defaultString(version))\r\n+        //                .append(KEY_SEPARATOR).append(defaultString(protocol));\r\n+        //        return groupBuilder.toString();\r\n+        return DEFAULT_MAPPING_GROUP + SLASH + serviceInterface;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/WritableMetadataService.java", "source2": "org/apache/dubbo/metadata/WritableMetadataService.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,87 +1,87 @@\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.metadata;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-\n-/**\n- * Local {@link MetadataService} that extends {@link MetadataService} and provides the modification, which is used for\n- * Dubbo's consumers and providers.\n- *\n- * @since 2.7.5\n- */\n-@SPI(\"default\")\n-public interface WritableMetadataService extends MetadataService {\n-    /**\n-     * Gets the current Dubbo Service name\n-     *\n-     * @return non-null\n-     */\n-    @Override\n-    default String serviceName() {\n-        return ApplicationModel.getApplication();\n-    }\n-\n-    /**\n-     * Exports a {@link URL}\n-     *\n-     * @param url a {@link URL}\n-     * @return If success , return <code>true</code>\n-     */\n-    boolean exportURL(URL url);\n-\n-    /**\n-     * Unexports a {@link URL}\n-     *\n-     * @param url a {@link URL}\n-     * @return If success , return <code>true</code>\n-     */\n-    boolean unexportURL(URL url);\n-\n-    /**\n-     * Subscribes a {@link URL}\n-     *\n-     * @param url a {@link URL}\n-     * @return If success , return <code>true</code>\n-     */\n-    boolean subscribeURL(URL url);\n-\n-    /**\n-     * Unsubscribes a {@link URL}\n-     *\n-     * @param url a {@link URL}\n-     * @return If success , return <code>true</code>\n-     */\n-    boolean unsubscribeURL(URL url);\n-\n-    void publishServiceDefinition(URL providerUrl);\n-\n-\n-    /**\n-     * Get {@link ExtensionLoader#getDefaultExtension() the defautl extension} of {@link WritableMetadataService}\n-     *\n-     * @return non-null\n-     */\n-    static WritableMetadataService getDefaultExtension() {\n-        return getExtensionLoader(WritableMetadataService.class).getDefaultExtension();\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.metadata;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+\r\n+/**\r\n+ * Local {@link MetadataService} that extends {@link MetadataService} and provides the modification, which is used for\r\n+ * Dubbo's consumers and providers.\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI(\"default\")\r\n+public interface WritableMetadataService extends MetadataService {\r\n+    /**\r\n+     * Gets the current Dubbo Service name\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    @Override\r\n+    default String serviceName() {\r\n+        return ApplicationModel.getApplication();\r\n+    }\r\n+\r\n+    /**\r\n+     * Exports a {@link URL}\r\n+     *\r\n+     * @param url a {@link URL}\r\n+     * @return If success , return <code>true</code>\r\n+     */\r\n+    boolean exportURL(URL url);\r\n+\r\n+    /**\r\n+     * Unexports a {@link URL}\r\n+     *\r\n+     * @param url a {@link URL}\r\n+     * @return If success , return <code>true</code>\r\n+     */\r\n+    boolean unexportURL(URL url);\r\n+\r\n+    /**\r\n+     * Subscribes a {@link URL}\r\n+     *\r\n+     * @param url a {@link URL}\r\n+     * @return If success , return <code>true</code>\r\n+     */\r\n+    boolean subscribeURL(URL url);\r\n+\r\n+    /**\r\n+     * Unsubscribes a {@link URL}\r\n+     *\r\n+     * @param url a {@link URL}\r\n+     * @return If success , return <code>true</code>\r\n+     */\r\n+    boolean unsubscribeURL(URL url);\r\n+\r\n+    void publishServiceDefinition(URL providerUrl);\r\n+\r\n+\r\n+    /**\r\n+     * Get {@link ExtensionLoader#getDefaultExtension() the defautl extension} of {@link WritableMetadataService}\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    static WritableMetadataService getDefaultExtension() {\r\n+        return getExtensionLoader(WritableMetadataService.class).getDefaultExtension();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/MethodDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/definition/MethodDefinitionBuilder.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.metadata.definition;\n-\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.ArrayList;\n-import java.util.List;\n-\n-/**\n- * {@link MethodDefinition} Builder based on Java Reflection\n- *\n- * @since 2.7.6\n- */\n-public class MethodDefinitionBuilder {\n-\n-    private final TypeDefinitionBuilder builder;\n-\n-    public MethodDefinitionBuilder(TypeDefinitionBuilder builder) {\n-        this.builder = builder;\n-    }\n-\n-    public MethodDefinitionBuilder() {\n-        this.builder = new TypeDefinitionBuilder();\n-    }\n-\n-    /**\n-     * Build the instance of {@link MethodDefinition}\n-     *\n-     * @param method {@link Method}\n-     * @return non-null\n-     */\n-    public MethodDefinition build(Method method) {\n-\n-        MethodDefinition md = new MethodDefinition();\n-        md.setName(method.getName());\n-\n-        // Process the parameters\n-        Class<?>[] paramTypes = method.getParameterTypes();\n-        Type[] genericParamTypes = method.getGenericParameterTypes();\n-\n-        int paramSize = paramTypes.length;\n-        String[] parameterTypes = new String[paramSize];\n-        List<TypeDefinition> parameters = new ArrayList<>(paramSize);\n-        for (int i = 0; i < paramSize; i++) {\n-            TypeDefinition parameter = builder.build(genericParamTypes[i], paramTypes[i]);\n-            parameterTypes[i] = parameter.getType();\n-            parameters.add(parameter);\n-        }\n-\n-        md.setParameterTypes(parameterTypes);\n-        md.setParameters(parameters);\n-\n-        // Process return type.\n-        TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());\n-        md.setReturnType(td.getType());\n-\n-        return md;\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.metadata.definition;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * {@link MethodDefinition} Builder based on Java Reflection\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MethodDefinitionBuilder {\r\n+\r\n+    private final TypeDefinitionBuilder builder;\r\n+\r\n+    public MethodDefinitionBuilder(TypeDefinitionBuilder builder) {\r\n+        this.builder = builder;\r\n+    }\r\n+\r\n+    public MethodDefinitionBuilder() {\r\n+        this.builder = new TypeDefinitionBuilder();\r\n+    }\r\n+\r\n+    /**\r\n+     * Build the instance of {@link MethodDefinition}\r\n+     *\r\n+     * @param method {@link Method}\r\n+     * @return non-null\r\n+     */\r\n+    public MethodDefinition build(Method method) {\r\n+\r\n+        MethodDefinition md = new MethodDefinition();\r\n+        md.setName(method.getName());\r\n+\r\n+        // Process the parameters\r\n+        Class<?>[] paramTypes = method.getParameterTypes();\r\n+        Type[] genericParamTypes = method.getGenericParameterTypes();\r\n+\r\n+        int paramSize = paramTypes.length;\r\n+        String[] parameterTypes = new String[paramSize];\r\n+        List<TypeDefinition> parameters = new ArrayList<>(paramSize);\r\n+        for (int i = 0; i < paramSize; i++) {\r\n+            TypeDefinition parameter = builder.build(genericParamTypes[i], paramTypes[i]);\r\n+            parameterTypes[i] = parameter.getType();\r\n+            parameters.add(parameter);\r\n+        }\r\n+\r\n+        md.setParameterTypes(parameterTypes);\r\n+        md.setParameters(parameters);\r\n+\r\n+        // Process return type.\r\n+        TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());\r\n+        md.setReturnType(td.getType());\r\n+\r\n+        return md;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,107 +1,107 @@\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.metadata.definition;\n-\n-import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-import org.apache.dubbo.metadata.definition.util.ClassUtils;\n-\n-import com.google.gson.Gson;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.List;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public final class ServiceDefinitionBuilder {\n-\n-    /**\n-     * Describe a Java interface in {@link ServiceDefinition}.\n-     *\n-     * @return Service description\n-     */\n-    public static ServiceDefinition build(final Class<?> interfaceClass) {\n-        ServiceDefinition sd = new ServiceDefinition();\n-        build(sd, interfaceClass);\n-        return sd;\n-    }\n-\n-    public static FullServiceDefinition buildFullDefinition(final Class<?> interfaceClass) {\n-        FullServiceDefinition sd = new FullServiceDefinition();\n-        build(sd, interfaceClass);\n-        return sd;\n-    }\n-\n-    public static FullServiceDefinition buildFullDefinition(final Class<?> interfaceClass, Map<String, String> params) {\n-        FullServiceDefinition sd = new FullServiceDefinition();\n-        build(sd, interfaceClass);\n-        sd.setParameters(params);\n-        return sd;\n-    }\n-\n-    public static <T extends ServiceDefinition> void build(T sd, final Class<?> interfaceClass) {\n-        sd.setCanonicalName(interfaceClass.getCanonicalName());\n-        sd.setCodeSource(ClassUtils.getCodeSource(interfaceClass));\n-\n-        TypeDefinitionBuilder builder = new TypeDefinitionBuilder();\n-        List<Method> methods = ClassUtils.getPublicNonStaticMethods(interfaceClass);\n-        for (Method method : methods) {\n-            MethodDefinition md = new MethodDefinition();\n-            md.setName(method.getName());\n-\n-            // Process parameter types.\n-            Class<?>[] paramTypes = method.getParameterTypes();\n-            Type[] genericParamTypes = method.getGenericParameterTypes();\n-\n-            String[] parameterTypes = new String[paramTypes.length];\n-            for (int i = 0; i < paramTypes.length; i++) {\n-                TypeDefinition td = builder.build(genericParamTypes[i], paramTypes[i]);\n-                parameterTypes[i] = td.getType();\n-            }\n-            md.setParameterTypes(parameterTypes);\n-\n-            // Process return type.\n-            TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());\n-            md.setReturnType(td.getType());\n-\n-            sd.getMethods().add(md);\n-        }\n-\n-        sd.setTypes(builder.getTypeDefinitions());\n-    }\n-\n-    /**\n-     * Describe a Java interface in Json schema.\n-     *\n-     * @return Service description\n-     */\n-    public static String schema(final Class<?> clazz) {\n-        ServiceDefinition sd = build(clazz);\n-        Gson gson = new Gson();\n-        return gson.toJson(sd);\n-    }\n-\n-    private ServiceDefinitionBuilder() {\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.metadata.definition;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+import org.apache.dubbo.metadata.definition.util.ClassUtils;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public final class ServiceDefinitionBuilder {\r\n+\r\n+    /**\r\n+     * Describe a Java interface in {@link ServiceDefinition}.\r\n+     *\r\n+     * @return Service description\r\n+     */\r\n+    public static ServiceDefinition build(final Class<?> interfaceClass) {\r\n+        ServiceDefinition sd = new ServiceDefinition();\r\n+        build(sd, interfaceClass);\r\n+        return sd;\r\n+    }\r\n+\r\n+    public static FullServiceDefinition buildFullDefinition(final Class<?> interfaceClass) {\r\n+        FullServiceDefinition sd = new FullServiceDefinition();\r\n+        build(sd, interfaceClass);\r\n+        return sd;\r\n+    }\r\n+\r\n+    public static FullServiceDefinition buildFullDefinition(final Class<?> interfaceClass, Map<String, String> params) {\r\n+        FullServiceDefinition sd = new FullServiceDefinition();\r\n+        build(sd, interfaceClass);\r\n+        sd.setParameters(params);\r\n+        return sd;\r\n+    }\r\n+\r\n+    public static <T extends ServiceDefinition> void build(T sd, final Class<?> interfaceClass) {\r\n+        sd.setCanonicalName(interfaceClass.getCanonicalName());\r\n+        sd.setCodeSource(ClassUtils.getCodeSource(interfaceClass));\r\n+\r\n+        TypeDefinitionBuilder builder = new TypeDefinitionBuilder();\r\n+        List<Method> methods = ClassUtils.getPublicNonStaticMethods(interfaceClass);\r\n+        for (Method method : methods) {\r\n+            MethodDefinition md = new MethodDefinition();\r\n+            md.setName(method.getName());\r\n+\r\n+            // Process parameter types.\r\n+            Class<?>[] paramTypes = method.getParameterTypes();\r\n+            Type[] genericParamTypes = method.getGenericParameterTypes();\r\n+\r\n+            String[] parameterTypes = new String[paramTypes.length];\r\n+            for (int i = 0; i < paramTypes.length; i++) {\r\n+                TypeDefinition td = builder.build(genericParamTypes[i], paramTypes[i]);\r\n+                parameterTypes[i] = td.getType();\r\n+            }\r\n+            md.setParameterTypes(parameterTypes);\r\n+\r\n+            // Process return type.\r\n+            TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());\r\n+            md.setReturnType(td.getType());\r\n+\r\n+            sd.getMethods().add(md);\r\n+        }\r\n+\r\n+        sd.setTypes(builder.getTypeDefinitions());\r\n+    }\r\n+\r\n+    /**\r\n+     * Describe a Java interface in Json schema.\r\n+     *\r\n+     * @return Service description\r\n+     */\r\n+    public static String schema(final Class<?> clazz) {\r\n+        ServiceDefinition sd = build(clazz);\r\n+        Gson gson = new Gson();\r\n+        return gson.toJson(sd);\r\n+    }\r\n+\r\n+    private ServiceDefinitionBuilder() {\r\n+    }\r\n+}\r\n+\r\n+\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,88 +1,88 @@\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.metadata.definition;\n-\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.metadata.definition.builder.DefaultTypeBuilder;\n-import org.apache.dubbo.metadata.definition.builder.TypeBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Type;\n-import java.util.ArrayList;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-import static org.apache.dubbo.common.utils.ClassUtils.isSimpleType;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class TypeDefinitionBuilder {\n-    private static final Logger logger = LoggerFactory.getLogger(TypeDefinitionBuilder.class);\n-    static final List<TypeBuilder> BUILDERS;\n-\n-    static {\n-        ExtensionLoader<TypeBuilder> extensionLoader = ExtensionLoader.getExtensionLoader(TypeBuilder.class);\n-        Set<TypeBuilder> tbs = extensionLoader.getSupportedExtensionInstances();\n-        BUILDERS = new ArrayList<>(tbs);\n-    }\n-\n-    public static TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        TypeBuilder builder = getGenericTypeBuilder(type, clazz);\n-        TypeDefinition td;\n-        if (builder != null) {\n-            td = builder.build(type, clazz, typeCache);\n-            td.setTypeBuilderName(builder.getClass().getName());\n-        } else {\n-            td = DefaultTypeBuilder.build(clazz, typeCache);\n-            td.setTypeBuilderName(DefaultTypeBuilder.class.getName());\n-        }\n-        if (isSimpleType(clazz)) { // changed since 2.7.6\n-            td.setProperties(null);\n-        }\n-        return td;\n-    }\n-\n-    private static TypeBuilder getGenericTypeBuilder(Type type, Class<?> clazz) {\n-        for (TypeBuilder builder : BUILDERS) {\n-            try {\n-                if (builder.accept(type, clazz)) {\n-                    return builder;\n-                }\n-            } catch (NoClassDefFoundError cnfe) {\n-                //ignore\n-                logger.info(\"Throw classNotFound (\" + cnfe.getMessage() + \") in \" + builder.getClass());\n-            }\n-        }\n-        return null;\n-    }\n-\n-    private Map<Class<?>, TypeDefinition> typeCache = new HashMap<>();\n-\n-    public TypeDefinition build(Type type, Class<?> clazz) {\n-        return build(type, clazz, typeCache);\n-    }\n-\n-    public List<TypeDefinition> getTypeDefinitions() {\n-        return new ArrayList<>(typeCache.values());\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.metadata.definition;\r\n+\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.metadata.definition.builder.DefaultTypeBuilder;\r\n+import org.apache.dubbo.metadata.definition.builder.TypeBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Type;\r\n+import java.util.ArrayList;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+import static org.apache.dubbo.common.utils.ClassUtils.isSimpleType;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class TypeDefinitionBuilder {\r\n+    private static final Logger logger = LoggerFactory.getLogger(TypeDefinitionBuilder.class);\r\n+    static final List<TypeBuilder> BUILDERS;\r\n+\r\n+    static {\r\n+        ExtensionLoader<TypeBuilder> extensionLoader = ExtensionLoader.getExtensionLoader(TypeBuilder.class);\r\n+        Set<TypeBuilder> tbs = extensionLoader.getSupportedExtensionInstances();\r\n+        BUILDERS = new ArrayList<>(tbs);\r\n+    }\r\n+\r\n+    public static TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        TypeBuilder builder = getGenericTypeBuilder(type, clazz);\r\n+        TypeDefinition td;\r\n+        if (builder != null) {\r\n+            td = builder.build(type, clazz, typeCache);\r\n+            td.setTypeBuilderName(builder.getClass().getName());\r\n+        } else {\r\n+            td = DefaultTypeBuilder.build(clazz, typeCache);\r\n+            td.setTypeBuilderName(DefaultTypeBuilder.class.getName());\r\n+        }\r\n+        if (isSimpleType(clazz)) { // changed since 2.7.6\r\n+            td.setProperties(null);\r\n+        }\r\n+        return td;\r\n+    }\r\n+\r\n+    private static TypeBuilder getGenericTypeBuilder(Type type, Class<?> clazz) {\r\n+        for (TypeBuilder builder : BUILDERS) {\r\n+            try {\r\n+                if (builder.accept(type, clazz)) {\r\n+                    return builder;\r\n+                }\r\n+            } catch (NoClassDefFoundError cnfe) {\r\n+                //ignore\r\n+                logger.info(\"Throw classNotFound (\" + cnfe.getMessage() + \") in \" + builder.getClass());\r\n+            }\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    private Map<Class<?>, TypeDefinition> typeCache = new HashMap<>();\r\n+\r\n+    public TypeDefinition build(Type type, Class<?> clazz) {\r\n+        return build(type, clazz, typeCache);\r\n+    }\r\n+\r\n+    public List<TypeDefinition> getTypeDefinitions() {\r\n+        return new ArrayList<>(typeCache.values());\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,48 +1,48 @@\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.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Type;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class ArrayTypeBuilder implements TypeBuilder {\n-\n-    @Override\n-    public boolean accept(Type type, Class<?> clazz) {\n-        if (clazz == null) {\n-            return false;\n-        }\n-        return clazz.isArray();\n-    }\n-\n-    @Override\n-    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        // Process the component type of an array.\n-        Class<?> componentType = clazz.getComponentType();\n-        TypeDefinitionBuilder.build(componentType, componentType, typeCache);\n-\n-        final String canonicalName = clazz.getCanonicalName();\n-        return new TypeDefinition(canonicalName);\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.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Type;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class ArrayTypeBuilder implements TypeBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(Type type, Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            return false;\r\n+        }\r\n+        return clazz.isArray();\r\n+    }\r\n+\r\n+    @Override\r\n+    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        // Process the component type of an array.\r\n+        Class<?> componentType = clazz.getComponentType();\r\n+        TypeDefinitionBuilder.build(componentType, componentType, typeCache);\r\n+\r\n+        final String canonicalName = clazz.getCanonicalName();\r\n+        return new TypeDefinition(canonicalName);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,70 +1,70 @@\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.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.ParameterizedType;\n-import java.lang.reflect.Type;\n-import java.text.MessageFormat;\n-import java.util.Arrays;\n-import java.util.Collection;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class CollectionTypeBuilder implements TypeBuilder {\n-\n-    @Override\n-    public boolean accept(Type type, Class<?> clazz) {\n-        if (clazz == null) {\n-            return false;\n-        }\n-        return Collection.class.isAssignableFrom(clazz);\n-    }\n-\n-    @Override\n-    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        if (!(type instanceof ParameterizedType)) {\n-            return new TypeDefinition(clazz.getName());\n-        }\n-\n-        ParameterizedType parameterizedType = (ParameterizedType) type;\n-        Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();\n-        if (actualTypeArgs == null || actualTypeArgs.length != 1) {\n-            throw new IllegalArgumentException(MessageFormat.format(\n-                    \"[ServiceDefinitionBuilder] Collection type [{0}] with unexpected amount of arguments [{1}].\"\n-                            + Arrays.toString(actualTypeArgs),\n-                    type, actualTypeArgs));\n-        }\n-\n-        Type actualType = actualTypeArgs[0];\n-        if (actualType instanceof ParameterizedType) {\n-            // Nested collection or map.\n-            Class<?> rawType = (Class<?>) ((ParameterizedType) actualType).getRawType();\n-            TypeDefinitionBuilder.build(actualType, rawType, typeCache);\n-        } else if (actualType instanceof Class<?>) {\n-            Class<?> actualClass = (Class<?>) actualType;\n-            TypeDefinitionBuilder.build(null, actualClass, typeCache);\n-        }\n-\n-        return new TypeDefinition(type.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.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.ParameterizedType;\r\n+import java.lang.reflect.Type;\r\n+import java.text.MessageFormat;\r\n+import java.util.Arrays;\r\n+import java.util.Collection;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class CollectionTypeBuilder implements TypeBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(Type type, Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            return false;\r\n+        }\r\n+        return Collection.class.isAssignableFrom(clazz);\r\n+    }\r\n+\r\n+    @Override\r\n+    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        if (!(type instanceof ParameterizedType)) {\r\n+            return new TypeDefinition(clazz.getName());\r\n+        }\r\n+\r\n+        ParameterizedType parameterizedType = (ParameterizedType) type;\r\n+        Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();\r\n+        if (actualTypeArgs == null || actualTypeArgs.length != 1) {\r\n+            throw new IllegalArgumentException(MessageFormat.format(\r\n+                    \"[ServiceDefinitionBuilder] Collection type [{0}] with unexpected amount of arguments [{1}].\"\r\n+                            + Arrays.toString(actualTypeArgs),\r\n+                    type, actualTypeArgs));\r\n+        }\r\n+\r\n+        Type actualType = actualTypeArgs[0];\r\n+        if (actualType instanceof ParameterizedType) {\r\n+            // Nested collection or map.\r\n+            Class<?> rawType = (Class<?>) ((ParameterizedType) actualType).getRawType();\r\n+            TypeDefinitionBuilder.build(actualType, rawType, typeCache);\r\n+        } else if (actualType instanceof Class<?>) {\r\n+            Class<?> actualClass = (Class<?>) actualType;\r\n+            TypeDefinitionBuilder.build(null, actualClass, typeCache);\r\n+        }\r\n+\r\n+        return new TypeDefinition(type.toString());\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,70 +1,70 @@\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.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-import org.apache.dubbo.metadata.definition.util.ClassUtils;\n-import org.apache.dubbo.metadata.definition.util.JaketConfigurationUtils;\n-\n-import java.lang.reflect.Field;\n-import java.lang.reflect.Type;\n-import java.util.List;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public final class DefaultTypeBuilder {\n-\n-    public static TypeDefinition build(Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-//        final String canonicalName = clazz.getCanonicalName();\n-        final String name = clazz.getName();\n-\n-        TypeDefinition td = new TypeDefinition(name);\n-        // Try to get a cached definition\n-        if (typeCache.containsKey(clazz)) {\n-            return typeCache.get(clazz);\n-        }\n-\n-        // Primitive type\n-        if (!JaketConfigurationUtils.needAnalyzing(clazz)) {\n-            return td;\n-        }\n-\n-        // Custom type\n-        TypeDefinition ref = new TypeDefinition(name);\n-        ref.set$ref(name);\n-        typeCache.put(clazz, ref);\n-\n-        List<Field> fields = ClassUtils.getNonStaticFields(clazz);\n-        for (Field field : fields) {\n-            String fieldName = field.getName();\n-            Class<?> fieldClass = field.getType();\n-            Type fieldType = field.getGenericType();\n-\n-            TypeDefinition fieldTd = TypeDefinitionBuilder.build(fieldType, fieldClass, typeCache);\n-            td.getProperties().put(fieldName, fieldTd);\n-        }\n-\n-        typeCache.put(clazz, td);\n-        return td;\n-    }\n-\n-    private DefaultTypeBuilder() {\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.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+import org.apache.dubbo.metadata.definition.util.ClassUtils;\r\n+import org.apache.dubbo.metadata.definition.util.JaketConfigurationUtils;\r\n+\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.Type;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public final class DefaultTypeBuilder {\r\n+\r\n+    public static TypeDefinition build(Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+//        final String canonicalName = clazz.getCanonicalName();\r\n+        final String name = clazz.getName();\r\n+\r\n+        TypeDefinition td = new TypeDefinition(name);\r\n+        // Try to get a cached definition\r\n+        if (typeCache.containsKey(clazz)) {\r\n+            return typeCache.get(clazz);\r\n+        }\r\n+\r\n+        // Primitive type\r\n+        if (!JaketConfigurationUtils.needAnalyzing(clazz)) {\r\n+            return td;\r\n+        }\r\n+\r\n+        // Custom type\r\n+        TypeDefinition ref = new TypeDefinition(name);\r\n+        ref.set$ref(name);\r\n+        typeCache.put(clazz, ref);\r\n+\r\n+        List<Field> fields = ClassUtils.getNonStaticFields(clazz);\r\n+        for (Field field : fields) {\r\n+            String fieldName = field.getName();\r\n+            Class<?> fieldClass = field.getType();\r\n+            Type fieldType = field.getGenericType();\r\n+\r\n+            TypeDefinition fieldTd = TypeDefinitionBuilder.build(fieldType, fieldClass, typeCache);\r\n+            td.getProperties().put(fieldName, fieldTd);\r\n+        }\r\n+\r\n+        typeCache.put(clazz, td);\r\n+        return td;\r\n+    }\r\n+\r\n+    private DefaultTypeBuilder() {\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,58 +1,58 @@\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.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class EnumTypeBuilder implements TypeBuilder {\n-\n-    @Override\n-    public boolean accept(Type type, Class<?> clazz) {\n-        if (clazz == null) {\n-            return false;\n-        }\n-        return clazz.isEnum();\n-    }\n-\n-    @Override\n-    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        TypeDefinition td = new TypeDefinition(clazz.getCanonicalName());\n-\n-        try {\n-            Method methodValues = clazz.getDeclaredMethod(\"values\");\n-            Object[] values = (Object[]) methodValues.invoke(clazz, new Object[0]);\n-            int length = values.length;\n-            for (int i = 0; i < length; i++) {\n-                Object value = values[i];\n-                td.getEnums().add(value.toString());\n-            }\n-        } catch (Throwable t) {\n-            td.setId(\"-1\");\n-        }\n-\n-        typeCache.put(clazz, td);\n-        return td;\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.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class EnumTypeBuilder implements TypeBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(Type type, Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            return false;\r\n+        }\r\n+        return clazz.isEnum();\r\n+    }\r\n+\r\n+    @Override\r\n+    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        TypeDefinition td = new TypeDefinition(clazz.getCanonicalName());\r\n+\r\n+        try {\r\n+            Method methodValues = clazz.getDeclaredMethod(\"values\");\r\n+            Object[] values = (Object[]) methodValues.invoke(clazz, new Object[0]);\r\n+            int length = values.length;\r\n+            for (int i = 0; i < length; i++) {\r\n+                Object value = values[i];\r\n+                td.getEnums().add(value.toString());\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            td.setId(\"-1\");\r\n+        }\r\n+\r\n+        typeCache.put(clazz, td);\r\n+        return td;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,80 +1,80 @@\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.metadata.definition.builder;\n-\n-import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.ParameterizedType;\n-import java.lang.reflect.Type;\n-import java.text.MessageFormat;\n-import java.util.Arrays;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.common.utils.TypeUtils.getRawClass;\n-import static org.apache.dubbo.common.utils.TypeUtils.isClass;\n-import static org.apache.dubbo.common.utils.TypeUtils.isParameterizedType;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class MapTypeBuilder implements TypeBuilder {\n-\n-    @Override\n-    public boolean accept(Type type, Class<?> clazz) {\n-        if (clazz == null) {\n-            return false;\n-        }\n-        return Map.class.isAssignableFrom(clazz);\n-    }\n-\n-    @Override\n-    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\n-        if (!(type instanceof ParameterizedType)) {\n-            return new TypeDefinition(clazz.getName());\n-        }\n-\n-        ParameterizedType parameterizedType = (ParameterizedType) type;\n-        Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();\n-        int actualTypeArgsLength = actualTypeArgs == null ? 0 : actualTypeArgs.length;\n-\n-        if (actualTypeArgsLength != 2) {\n-            throw new IllegalArgumentException(MessageFormat.format(\n-                    \"[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}].\"\n-                            + Arrays.toString(actualTypeArgs), type, actualTypeArgs));\n-        }\n-\n-        String mapType = type.toString();\n-\n-        TypeDefinition typeDefinition = new TypeDefinition(mapType);\n-\n-        for (int i = 0; i < actualTypeArgsLength; i++) {\n-            Type actualType = actualTypeArgs[i];\n-            TypeDefinition item = null;\n-            Class<?> rawType = getRawClass(actualType);\n-            if (isParameterizedType(actualType)) {\n-                // Nested collection or map.\n-                item = TypeDefinitionBuilder.build(actualType, rawType, typeCache);\n-            } else if (isClass(actualType)) {\n-                item = TypeDefinitionBuilder.build(null, rawType, typeCache);\n-            }\n-            typeDefinition.getItems().add(item);\n-        }\n-\n-        return typeDefinition;\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.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.TypeDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.ParameterizedType;\r\n+import java.lang.reflect.Type;\r\n+import java.text.MessageFormat;\r\n+import java.util.Arrays;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.common.utils.TypeUtils.getRawClass;\r\n+import static org.apache.dubbo.common.utils.TypeUtils.isClass;\r\n+import static org.apache.dubbo.common.utils.TypeUtils.isParameterizedType;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class MapTypeBuilder implements TypeBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(Type type, Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            return false;\r\n+        }\r\n+        return Map.class.isAssignableFrom(clazz);\r\n+    }\r\n+\r\n+    @Override\r\n+    public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {\r\n+        if (!(type instanceof ParameterizedType)) {\r\n+            return new TypeDefinition(clazz.getName());\r\n+        }\r\n+\r\n+        ParameterizedType parameterizedType = (ParameterizedType) type;\r\n+        Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();\r\n+        int actualTypeArgsLength = actualTypeArgs == null ? 0 : actualTypeArgs.length;\r\n+\r\n+        if (actualTypeArgsLength != 2) {\r\n+            throw new IllegalArgumentException(MessageFormat.format(\r\n+                    \"[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}].\"\r\n+                            + Arrays.toString(actualTypeArgs), type, actualTypeArgs));\r\n+        }\r\n+\r\n+        String mapType = type.toString();\r\n+\r\n+        TypeDefinition typeDefinition = new TypeDefinition(mapType);\r\n+\r\n+        for (int i = 0; i < actualTypeArgsLength; i++) {\r\n+            Type actualType = actualTypeArgs[i];\r\n+            TypeDefinition item = null;\r\n+            Class<?> rawType = getRawClass(actualType);\r\n+            if (isParameterizedType(actualType)) {\r\n+                // Nested collection or map.\r\n+                item = TypeDefinitionBuilder.build(actualType, rawType, typeCache);\r\n+            } else if (isClass(actualType)) {\r\n+                item = TypeDefinitionBuilder.build(null, rawType, typeCache);\r\n+            }\r\n+            typeDefinition.getItems().add(item);\r\n+        }\r\n+\r\n+        return typeDefinition;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/builder/TypeBuilder.java", "source2": "org/apache/dubbo/metadata/definition/builder/TypeBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,42 +1,42 @@\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.metadata.definition.builder;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import java.lang.reflect.Type;\n-import java.util.Map;\n-\n-/**\n- * 2015/1/27.\n- */\n-@SPI\n-public interface TypeBuilder extends Prioritized {\n-\n-    /**\n-     * Whether the build accept the type or class passed in.\n-     */\n-    boolean accept(Type type, Class<?> clazz);\n-\n-    /**\n-     * Build type definition with the type or class.\n-     */\n-    TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache);\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.metadata.definition.builder;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import java.lang.reflect.Type;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+@SPI\r\n+public interface TypeBuilder extends Prioritized {\r\n+\r\n+    /**\r\n+     * Whether the build accept the type or class passed in.\r\n+     */\r\n+    boolean accept(Type type, Class<?> clazz);\r\n+\r\n+    /**\r\n+     * Build type definition with the type or class.\r\n+     */\r\n+    TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java", "source2": "org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,43 +1,43 @@\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.metadata.definition.model;\n-\n-import java.util.Map;\n-\n-/**\n- * 2018/10/25\n- */\n-public class FullServiceDefinition extends ServiceDefinition {\n-\n-    private Map<String, String> parameters;\n-\n-    public Map<String, String> getParameters() {\n-        return parameters;\n-    }\n-\n-    public void setParameters(Map<String, String> parameters) {\n-        this.parameters = parameters;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"FullServiceDefinition{\" +\n-                \"parameters=\" + parameters +\n-                \"} \" + super.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.metadata.definition.model;\r\n+\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * 2018/10/25\r\n+ */\r\n+public class FullServiceDefinition extends ServiceDefinition {\r\n+\r\n+    private Map<String, String> parameters;\r\n+\r\n+    public Map<String, String> getParameters() {\r\n+        return parameters;\r\n+    }\r\n+\r\n+    public void setParameters(Map<String, String> parameters) {\r\n+        this.parameters = parameters;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"FullServiceDefinition{\" +\r\n+                \"parameters=\" + parameters +\r\n+                \"} \" + super.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/model/MethodDefinition.java", "source2": "org/apache/dubbo/metadata/definition/model/MethodDefinition.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,100 +1,100 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.definition.model;\n-\n-import java.io.Serializable;\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.List;\n-import java.util.Objects;\n-\n-import static org.apache.dubbo.metadata.definition.model.TypeDefinition.formatType;\n-import static org.apache.dubbo.metadata.definition.model.TypeDefinition.formatTypes;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class MethodDefinition implements Serializable {\n-\n-    private String name;\n-    private String[] parameterTypes;\n-    private String returnType;\n-    private List<TypeDefinition> parameters;\n-\n-    public String getName() {\n-        return name;\n-    }\n-\n-    public List<TypeDefinition> getParameters() {\n-        if (parameters == null) {\n-            parameters = new ArrayList<>();\n-        }\n-        return parameters;\n-    }\n-\n-    public String[] getParameterTypes() {\n-        return parameterTypes;\n-    }\n-\n-    public String getReturnType() {\n-        return returnType;\n-    }\n-\n-    public void setName(String name) {\n-        this.name = name;\n-    }\n-\n-    public void setParameters(List<TypeDefinition> parameters) {\n-        this.parameters = parameters;\n-    }\n-\n-    public void setParameterTypes(String[] parameterTypes) {\n-        this.parameterTypes = formatTypes(parameterTypes);\n-    }\n-\n-    public void setReturnType(String returnType) {\n-        this.returnType = formatType(returnType);\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"MethodDefinition [name=\" + name + \", parameterTypes=\" + Arrays.toString(parameterTypes)\n-                + \", returnType=\" + returnType + \"]\";\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof MethodDefinition)) {\n-            return false;\n-        }\n-        MethodDefinition that = (MethodDefinition) o;\n-        return Objects.equals(getName(), that.getName()) &&\n-                Arrays.equals(getParameterTypes(), that.getParameterTypes()) &&\n-                Objects.equals(getReturnType(), that.getReturnType()) &&\n-                Objects.equals(getParameters(), that.getParameters());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        int result = Objects.hash(getName(), getReturnType(), getParameters());\n-        result = 31 * result + Arrays.hashCode(getParameterTypes());\n-        return result;\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.metadata.definition.model;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+\r\n+import static org.apache.dubbo.metadata.definition.model.TypeDefinition.formatType;\r\n+import static org.apache.dubbo.metadata.definition.model.TypeDefinition.formatTypes;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class MethodDefinition implements Serializable {\r\n+\r\n+    private String name;\r\n+    private String[] parameterTypes;\r\n+    private String returnType;\r\n+    private List<TypeDefinition> parameters;\r\n+\r\n+    public String getName() {\r\n+        return name;\r\n+    }\r\n+\r\n+    public List<TypeDefinition> getParameters() {\r\n+        if (parameters == null) {\r\n+            parameters = new ArrayList<>();\r\n+        }\r\n+        return parameters;\r\n+    }\r\n+\r\n+    public String[] getParameterTypes() {\r\n+        return parameterTypes;\r\n+    }\r\n+\r\n+    public String getReturnType() {\r\n+        return returnType;\r\n+    }\r\n+\r\n+    public void setName(String name) {\r\n+        this.name = name;\r\n+    }\r\n+\r\n+    public void setParameters(List<TypeDefinition> parameters) {\r\n+        this.parameters = parameters;\r\n+    }\r\n+\r\n+    public void setParameterTypes(String[] parameterTypes) {\r\n+        this.parameterTypes = formatTypes(parameterTypes);\r\n+    }\r\n+\r\n+    public void setReturnType(String returnType) {\r\n+        this.returnType = formatType(returnType);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"MethodDefinition [name=\" + name + \", parameterTypes=\" + Arrays.toString(parameterTypes)\r\n+                + \", returnType=\" + returnType + \"]\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof MethodDefinition)) {\r\n+            return false;\r\n+        }\r\n+        MethodDefinition that = (MethodDefinition) o;\r\n+        return Objects.equals(getName(), that.getName()) &&\r\n+                Arrays.equals(getParameterTypes(), that.getParameterTypes()) &&\r\n+                Objects.equals(getReturnType(), that.getReturnType()) &&\r\n+                Objects.equals(getParameters(), that.getParameters());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        int result = Objects.hash(getName(), getReturnType(), getParameters());\r\n+        result = 31 * result + Arrays.hashCode(getParameterTypes());\r\n+        return result;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/model/ServiceDefinition.java", "source2": "org/apache/dubbo/metadata/definition/model/ServiceDefinition.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,101 +1,101 @@\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.metadata.definition.model;\n-\n-import java.io.Serializable;\n-import java.util.ArrayList;\n-import java.util.List;\n-import java.util.Objects;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class ServiceDefinition implements Serializable {\n-\n-    private String canonicalName;\n-    private String codeSource;\n-    private List<MethodDefinition> methods;\n-    private List<TypeDefinition> types;\n-\n-    public String getCanonicalName() {\n-        return canonicalName;\n-    }\n-\n-    public String getCodeSource() {\n-        return codeSource;\n-    }\n-\n-    public List<MethodDefinition> getMethods() {\n-        if (methods == null) {\n-            methods = new ArrayList<>();\n-        }\n-        return methods;\n-    }\n-\n-    public List<TypeDefinition> getTypes() {\n-        if (types == null) {\n-            types = new ArrayList<>();\n-        }\n-        return types;\n-    }\n-\n-    public String getUniqueId() {\n-        return canonicalName + \"@\" + codeSource;\n-    }\n-\n-    public void setCanonicalName(String canonicalName) {\n-        this.canonicalName = canonicalName;\n-    }\n-\n-    public void setCodeSource(String codeSource) {\n-        this.codeSource = codeSource;\n-    }\n-\n-    public void setMethods(List<MethodDefinition> methods) {\n-        this.methods = methods;\n-    }\n-\n-    public void setTypes(List<TypeDefinition> types) {\n-        this.types = types;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"ServiceDefinition [canonicalName=\" + canonicalName + \", codeSource=\" + codeSource + \", methods=\"\n-                + methods + \"]\";\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof ServiceDefinition)) {\n-            return false;\n-        }\n-        ServiceDefinition that = (ServiceDefinition) o;\n-        return Objects.equals(getCanonicalName(), that.getCanonicalName()) &&\n-                Objects.equals(getCodeSource(), that.getCodeSource()) &&\n-                Objects.equals(getMethods(), that.getMethods()) &&\n-                Objects.equals(getTypes(), that.getTypes());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getCanonicalName(), getCodeSource(), getMethods(), getTypes());\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.metadata.definition.model;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class ServiceDefinition implements Serializable {\r\n+\r\n+    private String canonicalName;\r\n+    private String codeSource;\r\n+    private List<MethodDefinition> methods;\r\n+    private List<TypeDefinition> types;\r\n+\r\n+    public String getCanonicalName() {\r\n+        return canonicalName;\r\n+    }\r\n+\r\n+    public String getCodeSource() {\r\n+        return codeSource;\r\n+    }\r\n+\r\n+    public List<MethodDefinition> getMethods() {\r\n+        if (methods == null) {\r\n+            methods = new ArrayList<>();\r\n+        }\r\n+        return methods;\r\n+    }\r\n+\r\n+    public List<TypeDefinition> getTypes() {\r\n+        if (types == null) {\r\n+            types = new ArrayList<>();\r\n+        }\r\n+        return types;\r\n+    }\r\n+\r\n+    public String getUniqueId() {\r\n+        return canonicalName + \"@\" + codeSource;\r\n+    }\r\n+\r\n+    public void setCanonicalName(String canonicalName) {\r\n+        this.canonicalName = canonicalName;\r\n+    }\r\n+\r\n+    public void setCodeSource(String codeSource) {\r\n+        this.codeSource = codeSource;\r\n+    }\r\n+\r\n+    public void setMethods(List<MethodDefinition> methods) {\r\n+        this.methods = methods;\r\n+    }\r\n+\r\n+    public void setTypes(List<TypeDefinition> types) {\r\n+        this.types = types;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"ServiceDefinition [canonicalName=\" + canonicalName + \", codeSource=\" + codeSource + \", methods=\"\r\n+                + methods + \"]\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof ServiceDefinition)) {\r\n+            return false;\r\n+        }\r\n+        ServiceDefinition that = (ServiceDefinition) o;\r\n+        return Objects.equals(getCanonicalName(), that.getCanonicalName()) &&\r\n+                Objects.equals(getCodeSource(), that.getCodeSource()) &&\r\n+                Objects.equals(getMethods(), that.getMethods()) &&\r\n+                Objects.equals(getTypes(), that.getTypes());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getCanonicalName(), getCodeSource(), getMethods(), getTypes());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/model/TypeDefinition.java", "source2": "org/apache/dubbo/metadata/definition/model/TypeDefinition.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.metadata.definition.model;\n-\n-import com.google.gson.annotations.SerializedName;\n-\n-import java.io.Serializable;\n-import java.lang.reflect.ParameterizedType;\n-import java.util.ArrayList;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-\n-import static org.apache.dubbo.common.utils.StringUtils.replace;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class TypeDefinition implements Serializable {\n-\n-    private String id;\n-    private String type;\n-    @SerializedName(\"items\")\n-    private List<TypeDefinition> items;\n-    @SerializedName(\"enum\")\n-    private List<String> enums;\n-    private String $ref;\n-    private Map<String, TypeDefinition> properties;\n-    private String typeBuilderName;\n-\n-    public TypeDefinition() {\n-    }\n-\n-    public TypeDefinition(String type) {\n-        this.setType(type);\n-    }\n-\n-    /**\n-     * Format the {@link String} array presenting Java types\n-     *\n-     * @param types the strings presenting Java types\n-     * @return new String array of Java types after be formatted\n-     * @since 2.7.9\n-     */\n-    public static String[] formatTypes(String[] types) {\n-        String[] newTypes = new String[types.length];\n-        for (int i = 0; i < types.length; i++) {\n-            newTypes[i] = formatType(types[i]);\n-        }\n-        return newTypes;\n-    }\n-\n-    /**\n-     * Format the {@link String} presenting Java type\n-     *\n-     * @param type the String presenting type\n-     * @return new String presenting Java type after be formatted\n-     * @since 2.7.9\n-     */\n-    public static String formatType(String type) {\n-        if (isGenericType(type)) {\n-            return formatGenericType(type);\n-        }\n-        return type;\n-    }\n-\n-    /**\n-     * Replacing <code>\", \"</code> to <code>\",\"</code> will not change the semantic of\n-     * {@link ParameterizedType#toString()}\n-     *\n-     * @param type\n-     * @return formatted type\n-     * @see sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl\n-     */\n-    private static String formatGenericType(String type) {\n-        return replace(type, \", \", \",\");\n-    }\n-\n-    private static boolean isGenericType(String type) {\n-        return type.contains(\"<\") && type.contains(\">\");\n-    }\n-\n-    public String get$ref() {\n-        return $ref;\n-    }\n-\n-    public List<String> getEnums() {\n-        if (enums == null) {\n-            enums = new ArrayList<String>();\n-        }\n-        return enums;\n-    }\n-\n-    public String getId() {\n-        return id;\n-    }\n-\n-    public List<TypeDefinition> getItems() {\n-        if (items == null) {\n-            items = new ArrayList<>();\n-        }\n-        return items;\n-    }\n-\n-    public Map<String, TypeDefinition> getProperties() {\n-        if (properties == null) {\n-            properties = new HashMap<>();\n-        }\n-        return properties;\n-    }\n-\n-    public String getType() {\n-        return type;\n-    }\n-\n-    public String getTypeBuilderName() {\n-        return typeBuilderName;\n-    }\n-\n-    public void set$ref(String $ref) {\n-        this.$ref = $ref;\n-    }\n-\n-    public void setEnums(List<String> enums) {\n-        this.enums = enums;\n-    }\n-\n-    public void setId(String id) {\n-        this.id = id;\n-    }\n-\n-    public void setItems(List<TypeDefinition> items) {\n-        this.items = items;\n-    }\n-\n-    public void setProperties(Map<String, TypeDefinition> properties) {\n-        this.properties = properties;\n-    }\n-\n-    public void setType(String type) {\n-        this.type = formatType(type);\n-    }\n-\n-    public void setTypeBuilderName(String typeBuilderName) {\n-        this.typeBuilderName = typeBuilderName;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"TypeDefinition [id=\" + id + \", type=\" + type + \", properties=\" + properties + \", $ref=\" + $ref + \"]\";\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof TypeDefinition)) {\n-            return false;\n-        }\n-        TypeDefinition that = (TypeDefinition) o;\n-        return Objects.equals(getId(), that.getId()) &&\n-                Objects.equals(getType(), that.getType()) &&\n-                Objects.equals(getItems(), that.getItems()) &&\n-                Objects.equals(getEnums(), that.getEnums()) &&\n-                Objects.equals(get$ref(), that.get$ref()) &&\n-                Objects.equals(getProperties(), that.getProperties());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getId(), getType(), getItems(), getEnums(), get$ref(), getProperties());\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.metadata.definition.model;\r\n+\r\n+import com.google.gson.annotations.SerializedName;\r\n+\r\n+import java.io.Serializable;\r\n+import java.lang.reflect.ParameterizedType;\r\n+import java.util.ArrayList;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+\r\n+import static org.apache.dubbo.common.utils.StringUtils.replace;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class TypeDefinition implements Serializable {\r\n+\r\n+    private String id;\r\n+    private String type;\r\n+    @SerializedName(\"items\")\r\n+    private List<TypeDefinition> items;\r\n+    @SerializedName(\"enum\")\r\n+    private List<String> enums;\r\n+    private String $ref;\r\n+    private Map<String, TypeDefinition> properties;\r\n+    private String typeBuilderName;\r\n+\r\n+    public TypeDefinition() {\r\n+    }\r\n+\r\n+    public TypeDefinition(String type) {\r\n+        this.setType(type);\r\n+    }\r\n+\r\n+    /**\r\n+     * Format the {@link String} array presenting Java types\r\n+     *\r\n+     * @param types the strings presenting Java types\r\n+     * @return new String array of Java types after be formatted\r\n+     * @since 2.7.9\r\n+     */\r\n+    public static String[] formatTypes(String[] types) {\r\n+        String[] newTypes = new String[types.length];\r\n+        for (int i = 0; i < types.length; i++) {\r\n+            newTypes[i] = formatType(types[i]);\r\n+        }\r\n+        return newTypes;\r\n+    }\r\n+\r\n+    /**\r\n+     * Format the {@link String} presenting Java type\r\n+     *\r\n+     * @param type the String presenting type\r\n+     * @return new String presenting Java type after be formatted\r\n+     * @since 2.7.9\r\n+     */\r\n+    public static String formatType(String type) {\r\n+        if (isGenericType(type)) {\r\n+            return formatGenericType(type);\r\n+        }\r\n+        return type;\r\n+    }\r\n+\r\n+    /**\r\n+     * Replacing <code>\", \"</code> to <code>\",\"</code> will not change the semantic of\r\n+     * {@link ParameterizedType#toString()}\r\n+     *\r\n+     * @param type\r\n+     * @return formatted type\r\n+     * @see sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl\r\n+     */\r\n+    private static String formatGenericType(String type) {\r\n+        return replace(type, \", \", \",\");\r\n+    }\r\n+\r\n+    private static boolean isGenericType(String type) {\r\n+        return type.contains(\"<\") && type.contains(\">\");\r\n+    }\r\n+\r\n+    public String get$ref() {\r\n+        return $ref;\r\n+    }\r\n+\r\n+    public List<String> getEnums() {\r\n+        if (enums == null) {\r\n+            enums = new ArrayList<String>();\r\n+        }\r\n+        return enums;\r\n+    }\r\n+\r\n+    public String getId() {\r\n+        return id;\r\n+    }\r\n+\r\n+    public List<TypeDefinition> getItems() {\r\n+        if (items == null) {\r\n+            items = new ArrayList<>();\r\n+        }\r\n+        return items;\r\n+    }\r\n+\r\n+    public Map<String, TypeDefinition> getProperties() {\r\n+        if (properties == null) {\r\n+            properties = new HashMap<>();\r\n+        }\r\n+        return properties;\r\n+    }\r\n+\r\n+    public String getType() {\r\n+        return type;\r\n+    }\r\n+\r\n+    public String getTypeBuilderName() {\r\n+        return typeBuilderName;\r\n+    }\r\n+\r\n+    public void set$ref(String $ref) {\r\n+        this.$ref = $ref;\r\n+    }\r\n+\r\n+    public void setEnums(List<String> enums) {\r\n+        this.enums = enums;\r\n+    }\r\n+\r\n+    public void setId(String id) {\r\n+        this.id = id;\r\n+    }\r\n+\r\n+    public void setItems(List<TypeDefinition> items) {\r\n+        this.items = items;\r\n+    }\r\n+\r\n+    public void setProperties(Map<String, TypeDefinition> properties) {\r\n+        this.properties = properties;\r\n+    }\r\n+\r\n+    public void setType(String type) {\r\n+        this.type = formatType(type);\r\n+    }\r\n+\r\n+    public void setTypeBuilderName(String typeBuilderName) {\r\n+        this.typeBuilderName = typeBuilderName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"TypeDefinition [id=\" + id + \", type=\" + type + \", properties=\" + properties + \", $ref=\" + $ref + \"]\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof TypeDefinition)) {\r\n+            return false;\r\n+        }\r\n+        TypeDefinition that = (TypeDefinition) o;\r\n+        return Objects.equals(getId(), that.getId()) &&\r\n+                Objects.equals(getType(), that.getType()) &&\r\n+                Objects.equals(getItems(), that.getItems()) &&\r\n+                Objects.equals(getEnums(), that.getEnums()) &&\r\n+                Objects.equals(get$ref(), that.get$ref()) &&\r\n+                Objects.equals(getProperties(), that.getProperties());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getId(), getType(), getItems(), getEnums(), get$ref(), getProperties());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/util/ClassUtils.java", "source2": "org/apache/dubbo/metadata/definition/util/ClassUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,111 +1,111 @@\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.metadata.definition.util;\n-\n-import java.lang.reflect.Field;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.net.URL;\n-import java.security.CodeSource;\n-import java.security.ProtectionDomain;\n-import java.util.ArrayList;\n-import java.util.List;\n-\n-/**\n- * 2015/1/27.\n- */\n-public final class ClassUtils {\n-\n-    /**\n-     * Get the code source file or class path of the Class passed in.\n-     *\n-     * @param clazz\n-     * @return Jar file name or class path.\n-     */\n-    public static String getCodeSource(Class<?> clazz) {\n-        ProtectionDomain protectionDomain = clazz.getProtectionDomain();\n-        if (protectionDomain == null || protectionDomain.getCodeSource() == null) {\n-            return null;\n-        }\n-\n-        CodeSource codeSource = clazz.getProtectionDomain().getCodeSource();\n-        URL location = codeSource.getLocation();\n-        if (location == null) {\n-            return null;\n-        }\n-\n-        String path = codeSource.getLocation().toExternalForm();\n-\n-        if (path.endsWith(\".jar\") && path.contains(\"/\")) {\n-            return path.substring(path.lastIndexOf('/') + 1);\n-        }\n-        return path;\n-    }\n-\n-    /**\n-     * Get all non-static fields of the Class passed in or its super classes.\n-     * <p>\n-     *\n-     * @param clazz Class to parse.\n-     * @return field list\n-     */\n-    public static List<Field> getNonStaticFields(final Class<?> clazz) {\n-        List<Field> result = new ArrayList<>();\n-        Class<?> target = clazz;\n-        while (target != null) {\n-            if (JaketConfigurationUtils.isExcludedType(target)) {\n-                break;\n-            }\n-\n-            Field[] fields = target.getDeclaredFields();\n-            for (Field field : fields) {\n-                int modifiers = field.getModifiers();\n-                if (Modifier.isStatic(modifiers) || Modifier.isTransient(modifiers)) {\n-                    continue;\n-                }\n-\n-                result.add(field);\n-            }\n-            target = target.getSuperclass();\n-        }\n-\n-        return result;\n-    }\n-\n-    /**\n-     * Get all public, non-static methods of the Class passed in.\n-     * <p>\n-     *\n-     * @param clazz Class to parse.\n-     * @return methods list\n-     */\n-    public static List<Method> getPublicNonStaticMethods(final Class<?> clazz) {\n-        List<Method> result = new ArrayList<Method>();\n-\n-        Method[] methods = clazz.getMethods();\n-        for (Method method : methods) {\n-            int mod = method.getModifiers();\n-            if (Modifier.isPublic(mod) && !Modifier.isStatic(mod)) {\n-                result.add(method);\n-            }\n-        }\n-        return result;\n-    }\n-\n-    private ClassUtils() {\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.metadata.definition.util;\r\n+\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.net.URL;\r\n+import java.security.CodeSource;\r\n+import java.security.ProtectionDomain;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public final class ClassUtils {\r\n+\r\n+    /**\r\n+     * Get the code source file or class path of the Class passed in.\r\n+     *\r\n+     * @param clazz\r\n+     * @return Jar file name or class path.\r\n+     */\r\n+    public static String getCodeSource(Class<?> clazz) {\r\n+        ProtectionDomain protectionDomain = clazz.getProtectionDomain();\r\n+        if (protectionDomain == null || protectionDomain.getCodeSource() == null) {\r\n+            return null;\r\n+        }\r\n+\r\n+        CodeSource codeSource = clazz.getProtectionDomain().getCodeSource();\r\n+        URL location = codeSource.getLocation();\r\n+        if (location == null) {\r\n+            return null;\r\n+        }\r\n+\r\n+        String path = codeSource.getLocation().toExternalForm();\r\n+\r\n+        if (path.endsWith(\".jar\") && path.contains(\"/\")) {\r\n+            return path.substring(path.lastIndexOf('/') + 1);\r\n+        }\r\n+        return path;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all non-static fields of the Class passed in or its super classes.\r\n+     * <p>\r\n+     *\r\n+     * @param clazz Class to parse.\r\n+     * @return field list\r\n+     */\r\n+    public static List<Field> getNonStaticFields(final Class<?> clazz) {\r\n+        List<Field> result = new ArrayList<>();\r\n+        Class<?> target = clazz;\r\n+        while (target != null) {\r\n+            if (JaketConfigurationUtils.isExcludedType(target)) {\r\n+                break;\r\n+            }\r\n+\r\n+            Field[] fields = target.getDeclaredFields();\r\n+            for (Field field : fields) {\r\n+                int modifiers = field.getModifiers();\r\n+                if (Modifier.isStatic(modifiers) || Modifier.isTransient(modifiers)) {\r\n+                    continue;\r\n+                }\r\n+\r\n+                result.add(field);\r\n+            }\r\n+            target = target.getSuperclass();\r\n+        }\r\n+\r\n+        return result;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all public, non-static methods of the Class passed in.\r\n+     * <p>\r\n+     *\r\n+     * @param clazz Class to parse.\r\n+     * @return methods list\r\n+     */\r\n+    public static List<Method> getPublicNonStaticMethods(final Class<?> clazz) {\r\n+        List<Method> result = new ArrayList<Method>();\r\n+\r\n+        Method[] methods = clazz.getMethods();\r\n+        for (Method method : methods) {\r\n+            int mod = method.getModifiers();\r\n+            if (Modifier.isPublic(mod) && !Modifier.isStatic(mod)) {\r\n+                result.add(method);\r\n+            }\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    private ClassUtils() {\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java", "source2": "org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.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.metadata.definition.util;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.io.InputStream;\n-import java.util.Properties;\n-\n-/**\n- * 2015/1/27.\n- */\n-public class JaketConfigurationUtils {\n-\n-    private static final String CONFIGURATION_FILE = \"jaket.properties\";\n-\n-    private static String[] includedInterfacePackages;\n-    private static String[] includedTypePackages;\n-    private static String[] closedTypes;\n-\n-    static {\n-        Properties props = new Properties();\n-        InputStream inStream = JaketConfigurationUtils.class.getClassLoader().getResourceAsStream(CONFIGURATION_FILE);\n-        try {\n-            props.load(inStream);\n-            String value = (String) props.get(\"included_interface_packages\");\n-            if (StringUtils.isNotEmpty(value)) {\n-                includedInterfacePackages = value.split(\",\");\n-            }\n-\n-            value = props.getProperty(\"included_type_packages\");\n-            if (StringUtils.isNotEmpty(value)) {\n-                includedTypePackages = value.split(\",\");\n-            }\n-\n-            value = props.getProperty(\"closed_types\");\n-            if (StringUtils.isNotEmpty(value)) {\n-                closedTypes = value.split(\",\");\n-            }\n-\n-        } catch (Throwable e) {\n-            // Ignore it.\n-        }\n-    }\n-\n-    public static boolean isExcludedInterface(Class<?> clazz) {\n-        if (includedInterfacePackages == null || includedInterfacePackages.length == 0) {\n-            return false;\n-        }\n-\n-        for (String packagePrefix : includedInterfacePackages) {\n-            if (clazz.getCanonicalName().startsWith(packagePrefix)) {\n-                return false;\n-            }\n-        }\n-\n-        return true;\n-    }\n-\n-    public static boolean isExcludedType(Class<?> clazz) {\n-        if (includedTypePackages == null || includedTypePackages.length == 0) {\n-            return false;\n-        }\n-\n-        for (String packagePrefix : includedTypePackages) {\n-            if (clazz.getCanonicalName().startsWith(packagePrefix)) {\n-                return false;\n-            }\n-        }\n-\n-        return true;\n-    }\n-\n-    public static boolean needAnalyzing(Class<?> clazz) {\n-        String canonicalName = clazz.getCanonicalName();\n-\n-        if (closedTypes != null && closedTypes.length > 0) {\n-            for (String type : closedTypes) {\n-                if (canonicalName.startsWith(type)) {\n-                    return false;\n-                }\n-            }\n-        }\n-\n-        return !isExcludedType(clazz);\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.metadata.definition.util;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.io.InputStream;\r\n+import java.util.Properties;\r\n+\r\n+/**\r\n+ * 2015/1/27.\r\n+ */\r\n+public class JaketConfigurationUtils {\r\n+\r\n+    private static final String CONFIGURATION_FILE = \"jaket.properties\";\r\n+\r\n+    private static String[] includedInterfacePackages;\r\n+    private static String[] includedTypePackages;\r\n+    private static String[] closedTypes;\r\n+\r\n+    static {\r\n+        Properties props = new Properties();\r\n+        InputStream inStream = JaketConfigurationUtils.class.getClassLoader().getResourceAsStream(CONFIGURATION_FILE);\r\n+        try {\r\n+            props.load(inStream);\r\n+            String value = (String) props.get(\"included_interface_packages\");\r\n+            if (StringUtils.isNotEmpty(value)) {\r\n+                includedInterfacePackages = value.split(\",\");\r\n+            }\r\n+\r\n+            value = props.getProperty(\"included_type_packages\");\r\n+            if (StringUtils.isNotEmpty(value)) {\r\n+                includedTypePackages = value.split(\",\");\r\n+            }\r\n+\r\n+            value = props.getProperty(\"closed_types\");\r\n+            if (StringUtils.isNotEmpty(value)) {\r\n+                closedTypes = value.split(\",\");\r\n+            }\r\n+\r\n+        } catch (Throwable e) {\r\n+            // Ignore it.\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean isExcludedInterface(Class<?> clazz) {\r\n+        if (includedInterfacePackages == null || includedInterfacePackages.length == 0) {\r\n+            return false;\r\n+        }\r\n+\r\n+        for (String packagePrefix : includedInterfacePackages) {\r\n+            if (clazz.getCanonicalName().startsWith(packagePrefix)) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+    public static boolean isExcludedType(Class<?> clazz) {\r\n+        if (includedTypePackages == null || includedTypePackages.length == 0) {\r\n+            return false;\r\n+        }\r\n+\r\n+        for (String packagePrefix : includedTypePackages) {\r\n+            if (clazz.getCanonicalName().startsWith(packagePrefix)) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+    public static boolean needAnalyzing(Class<?> clazz) {\r\n+        String canonicalName = clazz.getCanonicalName();\r\n+\r\n+        if (closedTypes != null && closedTypes.length > 0) {\r\n+            for (String type : closedTypes) {\r\n+                if (canonicalName.startsWith(type)) {\r\n+                    return false;\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return !isExcludedType(clazz);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/MetadataReport.java", "source2": "org/apache/dubbo/metadata/report/MetadataReport.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,77 +1,77 @@\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.metadata.report;\n-\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.metadata.MappingListener;\n-import org.apache.dubbo.metadata.MetadataInfo;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\n-\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-public interface MetadataReport {\n-    /**\n-     * Service Definition -- START\n-     **/\n-    void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition);\n-\n-    String getServiceDefinition(MetadataIdentifier metadataIdentifier);\n-\n-    /**\n-     * Application Metadata -- START\n-     **/\n-    default void publishAppMetadata(SubscriberMetadataIdentifier identifier, MetadataInfo metadataInfo) {\n-    }\n-\n-    default MetadataInfo getAppMetadata(SubscriberMetadataIdentifier identifier, Map<String, String> instanceMetadata) {\n-        return null;\n-    }\n-\n-    /**\n-     * Service<-->Application Mapping -- START\n-     **/\n-    default Set<String> getServiceAppMapping(String serviceKey, MappingListener listener, URL url) {\n-        return Collections.emptySet();\n-    }\n-\n-    default void registerServiceAppMapping(String serviceKey, String application, URL url) {\n-        return;\n-    }\n-\n-    /**\n-     * deprecated or need triage\n-     **/\n-    void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap);\n-\n-    List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier);\n-\n-    void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url);\n-\n-    void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier);\n-\n-    void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls);\n-\n-    List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);\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.metadata.report;\r\n+\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.metadata.MappingListener;\r\n+import org.apache.dubbo.metadata.MetadataInfo;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\r\n+\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+\r\n+public interface MetadataReport {\r\n+    /**\r\n+     * Service Definition -- START\r\n+     **/\r\n+    void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition);\r\n+\r\n+    String getServiceDefinition(MetadataIdentifier metadataIdentifier);\r\n+\r\n+    /**\r\n+     * Application Metadata -- START\r\n+     **/\r\n+    default void publishAppMetadata(SubscriberMetadataIdentifier identifier, MetadataInfo metadataInfo) {\r\n+    }\r\n+\r\n+    default MetadataInfo getAppMetadata(SubscriberMetadataIdentifier identifier, Map<String, String> instanceMetadata) {\r\n+        return null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Service<-->Application Mapping -- START\r\n+     **/\r\n+    default Set<String> getServiceAppMapping(String serviceKey, MappingListener listener, URL url) {\r\n+        return Collections.emptySet();\r\n+    }\r\n+\r\n+    default void registerServiceAppMapping(String serviceKey, String application, URL url) {\r\n+        return;\r\n+    }\r\n+\r\n+    /**\r\n+     * deprecated or need triage\r\n+     **/\r\n+    void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap);\r\n+\r\n+    List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier);\r\n+\r\n+    void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url);\r\n+\r\n+    void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier);\r\n+\r\n+    void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls);\r\n+\r\n+    List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/MetadataReportFactory.java", "source2": "org/apache/dubbo/metadata/report/MetadataReportFactory.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,30 +1,30 @@\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.metadata.report;\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-/**\n- */\n-@SPI(\"redis\")\n-public interface MetadataReportFactory {\n-\n-    @Adaptive({\"protocol\"})\n-    MetadataReport getMetadataReport(URL 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.metadata.report;\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+/**\r\n+ */\r\n+@SPI(\"redis\")\r\n+public interface MetadataReportFactory {\r\n+\r\n+    @Adaptive({\"protocol\"})\r\n+    MetadataReport getMetadataReport(URL url);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/MetadataReportInstance.java", "source2": "org/apache/dubbo/metadata/report/MetadataReportInstance.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,86 +1,86 @@\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.metadata.report;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.URLBuilder;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.config.MetadataReportConfig;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_DIRECTORY;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.METADATA_REPORT_KEY;\n-\n-/**\n- * 2019-08-09\n- */\n-public class MetadataReportInstance {\n-\n-    private static AtomicBoolean init = new AtomicBoolean(false);\n-\n-    private static final Map<String, MetadataReport> metadataReports = new HashMap<>();\n-\n-    public static void init(MetadataReportConfig config) {\n-        if (init.get()) {\n-            return;\n-        }\n-        MetadataReportFactory metadataReportFactory = ExtensionLoader.getExtensionLoader(MetadataReportFactory.class).getAdaptiveExtension();\n-        URL url = config.toUrl();\n-        if (METADATA_REPORT_KEY.equals(url.getProtocol())) {\n-            String protocol = url.getParameter(METADATA_REPORT_KEY, DEFAULT_DIRECTORY);\n-            url = URLBuilder.from(url)\n-                    .setProtocol(protocol)\n-                    .removeParameter(METADATA_REPORT_KEY)\n-                    .build();\n-        }\n-        url = url.addParameterIfAbsent(APPLICATION_KEY, ApplicationModel.getApplicationConfig().getName());\n-        String relatedRegistryId = config.getRegistry() == null ? DEFAULT_KEY : config.getRegistry();\n-//        RegistryConfig registryConfig = ApplicationModel.getConfigManager().getRegistry(relatedRegistryId)\n-//                .orElseThrow(() -> new IllegalStateException(\"Registry id \" + relatedRegistryId + \" does not exist.\"));\n-        metadataReports.put(relatedRegistryId, metadataReportFactory.getMetadataReport(url));\n-        init.set(true);\n-    }\n-\n-    public static Map<String, MetadataReport> getMetadataReports(boolean checked) {\n-        if (checked) {\n-            checkInit();\n-        }\n-        return metadataReports;\n-    }\n-\n-    public static MetadataReport getMetadataReport(String registryKey) {\n-        checkInit();\n-        MetadataReport metadataReport = metadataReports.get(registryKey);\n-        if (metadataReport == null) {\n-            metadataReport = metadataReports.values().iterator().next();\n-        }\n-        return metadataReport;\n-    }\n-\n-\n-    private static void checkInit() {\n-        if (!init.get()) {\n-            throw new IllegalStateException(\"the metadata report was not inited.\");\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.metadata.report;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.URLBuilder;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.config.MetadataReportConfig;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_DIRECTORY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.METADATA_REPORT_KEY;\r\n+\r\n+/**\r\n+ * 2019-08-09\r\n+ */\r\n+public class MetadataReportInstance {\r\n+\r\n+    private static AtomicBoolean init = new AtomicBoolean(false);\r\n+\r\n+    private static final Map<String, MetadataReport> metadataReports = new HashMap<>();\r\n+\r\n+    public static void init(MetadataReportConfig config) {\r\n+        if (init.get()) {\r\n+            return;\r\n+        }\r\n+        MetadataReportFactory metadataReportFactory = ExtensionLoader.getExtensionLoader(MetadataReportFactory.class).getAdaptiveExtension();\r\n+        URL url = config.toUrl();\r\n+        if (METADATA_REPORT_KEY.equals(url.getProtocol())) {\r\n+            String protocol = url.getParameter(METADATA_REPORT_KEY, DEFAULT_DIRECTORY);\r\n+            url = URLBuilder.from(url)\r\n+                    .setProtocol(protocol)\r\n+                    .removeParameter(METADATA_REPORT_KEY)\r\n+                    .build();\r\n+        }\r\n+        url = url.addParameterIfAbsent(APPLICATION_KEY, ApplicationModel.getApplicationConfig().getName());\r\n+        String relatedRegistryId = config.getRegistry() == null ? DEFAULT_KEY : config.getRegistry();\r\n+//        RegistryConfig registryConfig = ApplicationModel.getConfigManager().getRegistry(relatedRegistryId)\r\n+//                .orElseThrow(() -> new IllegalStateException(\"Registry id \" + relatedRegistryId + \" does not exist.\"));\r\n+        metadataReports.put(relatedRegistryId, metadataReportFactory.getMetadataReport(url));\r\n+        init.set(true);\r\n+    }\r\n+\r\n+    public static Map<String, MetadataReport> getMetadataReports(boolean checked) {\r\n+        if (checked) {\r\n+            checkInit();\r\n+        }\r\n+        return metadataReports;\r\n+    }\r\n+\r\n+    public static MetadataReport getMetadataReport(String registryKey) {\r\n+        checkInit();\r\n+        MetadataReport metadataReport = metadataReports.get(registryKey);\r\n+        if (metadataReport == null) {\r\n+            metadataReport = metadataReports.values().iterator().next();\r\n+        }\r\n+        return metadataReport;\r\n+    }\r\n+\r\n+\r\n+    private static void checkInit() {\r\n+        if (!init.get()) {\r\n+            throw new IllegalStateException(\"the metadata report was not inited.\");\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/BaseApplicationMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/BaseApplicationMetadataIdentifier.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,63 +1,63 @@\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.metadata.report.identifier;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;\n-import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\n-\n-/**\n- * The Base class of MetadataIdentifier for service scope\n- * <p>\n- * 2019-08-09\n- */\n-public class BaseApplicationMetadataIdentifier {\n-    String application;\n-\n-    String getUniqueKey(KeyTypeEnum keyType, String... params) {\n-        if (keyType == KeyTypeEnum.PATH) {\n-            return getFilePathKey(params);\n-        }\n-        return getIdentifierKey(params);\n-    }\n-\n-    String getIdentifierKey(String... params) {\n-        return application + joinParams(KEY_SEPARATOR, params);\n-    }\n-\n-    private String joinParams(String joinChar, String... params) {\n-        if (params == null || params.length == 0) {\n-            return \"\";\n-        }\n-        StringBuilder sb = new StringBuilder();\n-        for (String param : params) {\n-            sb.append(joinChar);\n-            sb.append(param);\n-        }\n-        return sb.toString();\n-    }\n-\n-    private String getFilePathKey(String... params) {\n-        return getFilePathKey(DEFAULT_PATH_TAG, params);\n-    }\n-\n-    private String getFilePathKey(String pathTag, String... params) {\n-        return buildPath(pathTag, application, joinParams(PATH_SEPARATOR, params));\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.metadata.report.identifier;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\r\n+\r\n+/**\r\n+ * The Base class of MetadataIdentifier for service scope\r\n+ * <p>\r\n+ * 2019-08-09\r\n+ */\r\n+public class BaseApplicationMetadataIdentifier {\r\n+    String application;\r\n+\r\n+    String getUniqueKey(KeyTypeEnum keyType, String... params) {\r\n+        if (keyType == KeyTypeEnum.PATH) {\r\n+            return getFilePathKey(params);\r\n+        }\r\n+        return getIdentifierKey(params);\r\n+    }\r\n+\r\n+    String getIdentifierKey(String... params) {\r\n+        return application + joinParams(KEY_SEPARATOR, params);\r\n+    }\r\n+\r\n+    private String joinParams(String joinChar, String... params) {\r\n+        if (params == null || params.length == 0) {\r\n+            return \"\";\r\n+        }\r\n+        StringBuilder sb = new StringBuilder();\r\n+        for (String param : params) {\r\n+            sb.append(joinChar);\r\n+            sb.append(param);\r\n+        }\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+    private String getFilePathKey(String... params) {\r\n+        return getFilePathKey(DEFAULT_PATH_TAG, params);\r\n+    }\r\n+\r\n+    private String getFilePathKey(String pathTag, String... params) {\r\n+        return buildPath(pathTag, application, joinParams(PATH_SEPARATOR, params));\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/BaseMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/BaseMetadataIdentifier.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,25 +1,25 @@\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.metadata.report.identifier;\n-\n-public interface BaseMetadataIdentifier {\n-\n-    String getUniqueKey(KeyTypeEnum keyType);\n-\n-    String getIdentifierKey();\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.metadata.report.identifier;\r\n+\r\n+public interface BaseMetadataIdentifier {\r\n+\r\n+    String getUniqueKey(KeyTypeEnum keyType);\r\n+\r\n+    String getIdentifierKey();\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/BaseServiceMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/BaseServiceMetadataIdentifier.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,88 +1,88 @@\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.metadata.report.identifier;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\n-import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;\n-import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\n-\n-/**\n- * The Base class of MetadataIdentifier for service scope\n- * <p>\n- * 2019-08-09\n- */\n-public class BaseServiceMetadataIdentifier {\n-    String serviceInterface;\n-    String version;\n-    String group;\n-    String side;\n-\n-    String getUniqueKey(KeyTypeEnum keyType, String... params) {\n-        if (keyType == KeyTypeEnum.PATH) {\n-            return getFilePathKey(params);\n-        }\n-        return getIdentifierKey(params);\n-    }\n-\n-    String getIdentifierKey(String... params) {\n-\n-        return serviceInterface\n-                + KEY_SEPARATOR + (version == null ? \"\" : version)\n-                + KEY_SEPARATOR + (group == null ? \"\" : group)\n-                + KEY_SEPARATOR + (side == null ? \"\" : side)\n-                + joinParams(KEY_SEPARATOR, params);\n-    }\n-\n-    private String joinParams(String joinChar, String... params) {\n-        if (params == null || params.length == 0) {\n-            return \"\";\n-        }\n-        StringBuilder sb = new StringBuilder();\n-        for (String param : params) {\n-            if (param == null) {\n-                continue;\n-            }\n-            sb.append(joinChar);\n-            sb.append(param);\n-        }\n-        return sb.toString();\n-    }\n-\n-    private String getFilePathKey(String... params) {\n-        return getFilePathKey(DEFAULT_PATH_TAG, params);\n-    }\n-\n-    private String getFilePathKey(String pathTag, String... params) {\n-        return pathTag\n-                + (StringUtils.isEmpty(toServicePath()) ? \"\" : (PATH_SEPARATOR + toServicePath()))\n-                + (version == null ? \"\" : (PATH_SEPARATOR + version))\n-                + (group == null ? \"\" : (PATH_SEPARATOR + group))\n-                + (side == null ? \"\" : (PATH_SEPARATOR + side))\n-                + joinParams(PATH_SEPARATOR, params);\n-    }\n-\n-    public String toServicePath() {\n-        if (ANY_VALUE.equals(serviceInterface)) {\n-            return \"\";\n-        }\n-        return URL.encode(serviceInterface);\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.metadata.report.identifier;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\r\n+\r\n+/**\r\n+ * The Base class of MetadataIdentifier for service scope\r\n+ * <p>\r\n+ * 2019-08-09\r\n+ */\r\n+public class BaseServiceMetadataIdentifier {\r\n+    String serviceInterface;\r\n+    String version;\r\n+    String group;\r\n+    String side;\r\n+\r\n+    String getUniqueKey(KeyTypeEnum keyType, String... params) {\r\n+        if (keyType == KeyTypeEnum.PATH) {\r\n+            return getFilePathKey(params);\r\n+        }\r\n+        return getIdentifierKey(params);\r\n+    }\r\n+\r\n+    String getIdentifierKey(String... params) {\r\n+\r\n+        return serviceInterface\r\n+                + KEY_SEPARATOR + (version == null ? \"\" : version)\r\n+                + KEY_SEPARATOR + (group == null ? \"\" : group)\r\n+                + KEY_SEPARATOR + (side == null ? \"\" : side)\r\n+                + joinParams(KEY_SEPARATOR, params);\r\n+    }\r\n+\r\n+    private String joinParams(String joinChar, String... params) {\r\n+        if (params == null || params.length == 0) {\r\n+            return \"\";\r\n+        }\r\n+        StringBuilder sb = new StringBuilder();\r\n+        for (String param : params) {\r\n+            if (param == null) {\r\n+                continue;\r\n+            }\r\n+            sb.append(joinChar);\r\n+            sb.append(param);\r\n+        }\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+    private String getFilePathKey(String... params) {\r\n+        return getFilePathKey(DEFAULT_PATH_TAG, params);\r\n+    }\r\n+\r\n+    private String getFilePathKey(String pathTag, String... params) {\r\n+        return pathTag\r\n+                + (StringUtils.isEmpty(toServicePath()) ? \"\" : (PATH_SEPARATOR + toServicePath()))\r\n+                + (version == null ? \"\" : (PATH_SEPARATOR + version))\r\n+                + (group == null ? \"\" : (PATH_SEPARATOR + group))\r\n+                + (side == null ? \"\" : (PATH_SEPARATOR + side))\r\n+                + joinParams(PATH_SEPARATOR, params);\r\n+    }\r\n+\r\n+    public String toServicePath() {\r\n+        if (ANY_VALUE.equals(serviceInterface)) {\r\n+            return \"\";\r\n+        }\r\n+        return URL.encode(serviceInterface);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/KeyTypeEnum.java", "source2": "org/apache/dubbo/metadata/report/identifier/KeyTypeEnum.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-package org.apache.dubbo.metadata.report.identifier;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\n-import static org.apache.dubbo.common.utils.StringUtils.isBlank;\n-import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\n-\n-/**\n- * 2019-08-15\n- */\n-public enum KeyTypeEnum {\n-\n-    PATH(PATH_SEPARATOR) {\n-        public String build(String one, String... others) {\n-            return buildPath(one, others);\n-        }\n-    },\n-\n-    UNIQUE_KEY(KEY_SEPARATOR) {\n-        public String build(String one, String... others) {\n-            StringBuilder keyBuilder = new StringBuilder(one);\n-            for (String other : others) {\n-                keyBuilder.append(separator).append(isBlank(other) ? EMPTY_STRING : other);\n-            }\n-            return keyBuilder.toString();\n-        }\n-    };\n-\n-    final String separator;\n-\n-    KeyTypeEnum(String separator) {\n-        this.separator = separator;\n-    }\n-\n-    /**\n-     * Build Key\n-     *\n-     * @param one    one\n-     * @param others the others\n-     * @return\n-     * @since 2.7.8\n-     */\n-    public abstract String build(String one, String... others);\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.metadata.report.identifier;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isBlank;\r\n+import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;\r\n+\r\n+/**\r\n+ * 2019-08-15\r\n+ */\r\n+public enum KeyTypeEnum {\r\n+\r\n+    PATH(PATH_SEPARATOR) {\r\n+        public String build(String one, String... others) {\r\n+            return buildPath(one, others);\r\n+        }\r\n+    },\r\n+\r\n+    UNIQUE_KEY(KEY_SEPARATOR) {\r\n+        public String build(String one, String... others) {\r\n+            StringBuilder keyBuilder = new StringBuilder(one);\r\n+            for (String other : others) {\r\n+                keyBuilder.append(separator).append(isBlank(other) ? EMPTY_STRING : other);\r\n+            }\r\n+            return keyBuilder.toString();\r\n+        }\r\n+    };\r\n+\r\n+    final String separator;\r\n+\r\n+    KeyTypeEnum(String separator) {\r\n+        this.separator = separator;\r\n+    }\r\n+\r\n+    /**\r\n+     * Build Key\r\n+     *\r\n+     * @param one    one\r\n+     * @param others the others\r\n+     * @return\r\n+     * @since 2.7.8\r\n+     */\r\n+    public abstract String build(String one, String... others);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,105 +1,105 @@\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.metadata.report.identifier;\n-\n-import org.apache.dubbo.common.URL;\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.SIDE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-/**\n- * The MetadataIdentifier is used to store method descriptor.\n- * <p>\n- * The name of class is reserved because of it has been used in the previous version.\n- * <p>\n- * 2018/10/25\n- */\n-public class MetadataIdentifier extends BaseServiceMetadataIdentifier implements BaseMetadataIdentifier {\n-\n-    private String application;\n-\n-    public MetadataIdentifier() {\n-    }\n-\n-    public MetadataIdentifier(String serviceInterface, String version, String group, String side, String application) {\n-        this.serviceInterface = serviceInterface;\n-        this.version = version;\n-        this.group = group;\n-        this.side = side;\n-        this.application = application;\n-    }\n-\n-\n-    public MetadataIdentifier(URL url) {\n-        this.serviceInterface = url.getServiceInterface();\n-        this.version = url.getParameter(VERSION_KEY);\n-        this.group = url.getParameter(GROUP_KEY);\n-        this.side = url.getParameter(SIDE_KEY);\n-        setApplication(url.getParameter(APPLICATION_KEY));\n-    }\n-\n-    public String getUniqueKey(KeyTypeEnum keyType) {\n-        return super.getUniqueKey(keyType, application);\n-    }\n-\n-    public String getIdentifierKey() {\n-        return super.getIdentifierKey(application);\n-    }\n-\n-    public String getServiceInterface() {\n-        return serviceInterface;\n-    }\n-\n-    public void setServiceInterface(String serviceInterface) {\n-        this.serviceInterface = serviceInterface;\n-    }\n-\n-    public String getVersion() {\n-        return version;\n-    }\n-\n-    public void setVersion(String version) {\n-        this.version = version;\n-    }\n-\n-    public String getGroup() {\n-        return group;\n-    }\n-\n-    public void setGroup(String group) {\n-        this.group = group;\n-    }\n-\n-    public String getSide() {\n-        return side;\n-    }\n-\n-    public void setSide(String side) {\n-        this.side = side;\n-    }\n-\n-    public String getApplication() {\n-        return application;\n-    }\n-\n-    public void setApplication(String application) {\n-        this.application = application;\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.metadata.report.identifier;\r\n+\r\n+import org.apache.dubbo.common.URL;\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.SIDE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+/**\r\n+ * The MetadataIdentifier is used to store method descriptor.\r\n+ * <p>\r\n+ * The name of class is reserved because of it has been used in the previous version.\r\n+ * <p>\r\n+ * 2018/10/25\r\n+ */\r\n+public class MetadataIdentifier extends BaseServiceMetadataIdentifier implements BaseMetadataIdentifier {\r\n+\r\n+    private String application;\r\n+\r\n+    public MetadataIdentifier() {\r\n+    }\r\n+\r\n+    public MetadataIdentifier(String serviceInterface, String version, String group, String side, String application) {\r\n+        this.serviceInterface = serviceInterface;\r\n+        this.version = version;\r\n+        this.group = group;\r\n+        this.side = side;\r\n+        this.application = application;\r\n+    }\r\n+\r\n+\r\n+    public MetadataIdentifier(URL url) {\r\n+        this.serviceInterface = url.getServiceInterface();\r\n+        this.version = url.getParameter(VERSION_KEY);\r\n+        this.group = url.getParameter(GROUP_KEY);\r\n+        this.side = url.getParameter(SIDE_KEY);\r\n+        setApplication(url.getParameter(APPLICATION_KEY));\r\n+    }\r\n+\r\n+    public String getUniqueKey(KeyTypeEnum keyType) {\r\n+        return super.getUniqueKey(keyType, application);\r\n+    }\r\n+\r\n+    public String getIdentifierKey() {\r\n+        return super.getIdentifierKey(application);\r\n+    }\r\n+\r\n+    public String getServiceInterface() {\r\n+        return serviceInterface;\r\n+    }\r\n+\r\n+    public void setServiceInterface(String serviceInterface) {\r\n+        this.serviceInterface = serviceInterface;\r\n+    }\r\n+\r\n+    public String getVersion() {\r\n+        return version;\r\n+    }\r\n+\r\n+    public void setVersion(String version) {\r\n+        this.version = version;\r\n+    }\r\n+\r\n+    public String getGroup() {\r\n+        return group;\r\n+    }\r\n+\r\n+    public void setGroup(String group) {\r\n+        this.group = group;\r\n+    }\r\n+\r\n+    public String getSide() {\r\n+        return side;\r\n+    }\r\n+\r\n+    public void setSide(String side) {\r\n+        this.side = side;\r\n+    }\r\n+\r\n+    public String getApplication() {\r\n+        return application;\r\n+    }\r\n+\r\n+    public void setApplication(String application) {\r\n+        this.application = application;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/ServiceMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/ServiceMetadataIdentifier.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,85 +1,85 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.report.identifier;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\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.metadata.MetadataConstants.KEY_REVISION_PREFIX;\n-\n-/**\n- * The ServiceMetadataIdentifier is used to store the {@link org.apache.dubbo.common.URL}\n- * that are from provider and consumer\n- * <p>\n- * 2019-08-09\n- */\n-public class ServiceMetadataIdentifier extends BaseServiceMetadataIdentifier implements BaseMetadataIdentifier {\n-\n-    private String revision;\n-    private String protocol;\n-\n-    public ServiceMetadataIdentifier() {\n-    }\n-\n-    public ServiceMetadataIdentifier(String serviceInterface, String version, String group, String side, String revision, String protocol) {\n-        this.serviceInterface = serviceInterface;\n-        this.version = version;\n-        this.group = group;\n-        this.side = side;\n-        this.revision = revision;\n-        this.protocol = protocol;\n-    }\n-\n-\n-    public ServiceMetadataIdentifier(URL url) {\n-        this.serviceInterface = url.getServiceInterface();\n-        this.version = url.getParameter(VERSION_KEY);\n-        this.group = url.getParameter(GROUP_KEY);\n-        this.side = url.getParameter(SIDE_KEY);\n-        this.protocol = url.getProtocol();\n-    }\n-\n-    public String getUniqueKey(KeyTypeEnum keyType) {\n-        return super.getUniqueKey(keyType, protocol, KEY_REVISION_PREFIX + revision);\n-    }\n-\n-    public String getIdentifierKey() {\n-        return super.getIdentifierKey(protocol, KEY_REVISION_PREFIX + revision);\n-    }\n-\n-    public void setRevision(String revision) {\n-        this.revision = revision;\n-    }\n-\n-    public void setProtocol(String protocol) {\n-        this.protocol = protocol;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"ServiceMetadataIdentifier{\" +\n-                \"revision='\" + revision + '\\'' +\n-                \", protocol='\" + protocol + '\\'' +\n-                \", serviceInterface='\" + serviceInterface + '\\'' +\n-                \", version='\" + version + '\\'' +\n-                \", group='\" + group + '\\'' +\n-                \", side='\" + side + '\\'' +\n-                \"} \" + super.toString();\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.metadata.report.identifier;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\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.metadata.MetadataConstants.KEY_REVISION_PREFIX;\r\n+\r\n+/**\r\n+ * The ServiceMetadataIdentifier is used to store the {@link org.apache.dubbo.common.URL}\r\n+ * that are from provider and consumer\r\n+ * <p>\r\n+ * 2019-08-09\r\n+ */\r\n+public class ServiceMetadataIdentifier extends BaseServiceMetadataIdentifier implements BaseMetadataIdentifier {\r\n+\r\n+    private String revision;\r\n+    private String protocol;\r\n+\r\n+    public ServiceMetadataIdentifier() {\r\n+    }\r\n+\r\n+    public ServiceMetadataIdentifier(String serviceInterface, String version, String group, String side, String revision, String protocol) {\r\n+        this.serviceInterface = serviceInterface;\r\n+        this.version = version;\r\n+        this.group = group;\r\n+        this.side = side;\r\n+        this.revision = revision;\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+\r\n+    public ServiceMetadataIdentifier(URL url) {\r\n+        this.serviceInterface = url.getServiceInterface();\r\n+        this.version = url.getParameter(VERSION_KEY);\r\n+        this.group = url.getParameter(GROUP_KEY);\r\n+        this.side = url.getParameter(SIDE_KEY);\r\n+        this.protocol = url.getProtocol();\r\n+    }\r\n+\r\n+    public String getUniqueKey(KeyTypeEnum keyType) {\r\n+        return super.getUniqueKey(keyType, protocol, KEY_REVISION_PREFIX + revision);\r\n+    }\r\n+\r\n+    public String getIdentifierKey() {\r\n+        return super.getIdentifierKey(protocol, KEY_REVISION_PREFIX + revision);\r\n+    }\r\n+\r\n+    public void setRevision(String revision) {\r\n+        this.revision = revision;\r\n+    }\r\n+\r\n+    public void setProtocol(String protocol) {\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"ServiceMetadataIdentifier{\" +\r\n+                \"revision='\" + revision + '\\'' +\r\n+                \", protocol='\" + protocol + '\\'' +\r\n+                \", serviceInterface='\" + serviceInterface + '\\'' +\r\n+                \", version='\" + version + '\\'' +\r\n+                \", group='\" + group + '\\'' +\r\n+                \", side='\" + side + '\\'' +\r\n+                \"} \" + super.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/identifier/SubscriberMetadataIdentifier.java", "source2": "org/apache/dubbo/metadata/report/identifier/SubscriberMetadataIdentifier.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,70 +1,70 @@\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.metadata.report.identifier;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.REVISION_KEY;\n-\n-/**\n- * 2019-08-12\n- */\n-public class SubscriberMetadataIdentifier extends BaseApplicationMetadataIdentifier implements BaseMetadataIdentifier {\n-\n-    private String revision;\n-\n-    public SubscriberMetadataIdentifier() {\n-    }\n-\n-    public SubscriberMetadataIdentifier(String application, String revision) {\n-        this.application = application;\n-        this.revision = revision;\n-    }\n-\n-\n-    public SubscriberMetadataIdentifier(URL url) {\n-        this.application = url.getParameter(APPLICATION_KEY, \"\");\n-        this.revision = url.getParameter(REVISION_KEY, \"\");\n-    }\n-\n-    public String getUniqueKey(KeyTypeEnum keyType) {\n-        return super.getUniqueKey(keyType, revision);\n-    }\n-\n-    public String getIdentifierKey() {\n-        return super.getIdentifierKey(revision);\n-    }\n-\n-    public String getApplication() {\n-        return application;\n-    }\n-\n-    public void setApplication(String application) {\n-        this.application = application;\n-    }\n-\n-    public String getRevision() {\n-        return revision;\n-    }\n-\n-    public void setRevision(String revision) {\n-        this.revision = revision;\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.metadata.report.identifier;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REVISION_KEY;\r\n+\r\n+/**\r\n+ * 2019-08-12\r\n+ */\r\n+public class SubscriberMetadataIdentifier extends BaseApplicationMetadataIdentifier implements BaseMetadataIdentifier {\r\n+\r\n+    private String revision;\r\n+\r\n+    public SubscriberMetadataIdentifier() {\r\n+    }\r\n+\r\n+    public SubscriberMetadataIdentifier(String application, String revision) {\r\n+        this.application = application;\r\n+        this.revision = revision;\r\n+    }\r\n+\r\n+\r\n+    public SubscriberMetadataIdentifier(URL url) {\r\n+        this.application = url.getParameter(APPLICATION_KEY, \"\");\r\n+        this.revision = url.getParameter(REVISION_KEY, \"\");\r\n+    }\r\n+\r\n+    public String getUniqueKey(KeyTypeEnum keyType) {\r\n+        return super.getUniqueKey(keyType, revision);\r\n+    }\r\n+\r\n+    public String getIdentifierKey() {\r\n+        return super.getIdentifierKey(revision);\r\n+    }\r\n+\r\n+    public String getApplication() {\r\n+        return application;\r\n+    }\r\n+\r\n+    public void setApplication(String application) {\r\n+        this.application = application;\r\n+    }\r\n+\r\n+    public String getRevision() {\r\n+        return revision;\r\n+    }\r\n+\r\n+    public void setRevision(String revision) {\r\n+        this.revision = revision;\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java", "source2": "org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,468 +1,468 @@\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.metadata.report.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.CollectionUtils;\n-import org.apache.dubbo.common.utils.ConfigUtils;\n-import org.apache.dubbo.common.utils.NamedThreadFactory;\n-import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-import org.apache.dubbo.metadata.report.MetadataReport;\n-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;\n-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\n-\n-import com.google.gson.Gson;\n-import com.google.gson.reflect.TypeToken;\n-\n-import java.io.File;\n-import java.io.FileInputStream;\n-import java.io.FileOutputStream;\n-import java.io.IOException;\n-import java.io.InputStream;\n-import java.io.RandomAccessFile;\n-import java.lang.reflect.Type;\n-import java.nio.channels.FileChannel;\n-import java.nio.channels.FileLock;\n-import java.util.ArrayList;\n-import java.util.Calendar;\n-import java.util.Iterator;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Properties;\n-import java.util.Set;\n-import java.util.SortedSet;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.Executors;\n-import java.util.concurrent.ScheduledExecutorService;\n-import java.util.concurrent.ScheduledFuture;\n-import java.util.concurrent.ThreadLocalRandom;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-import java.util.concurrent.atomic.AtomicInteger;\n-import java.util.concurrent.atomic.AtomicLong;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.FILE_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.metadata.report.support.Constants.CYCLE_REPORT_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_CYCLE_REPORT;\n-import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_PERIOD;\n-import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_TIMES;\n-import static org.apache.dubbo.metadata.report.support.Constants.RETRY_PERIOD_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.RETRY_TIMES_KEY;\n-import static org.apache.dubbo.metadata.report.support.Constants.SYNC_REPORT_KEY;\n-\n-/**\n- *\n- */\n-public abstract class AbstractMetadataReport implements MetadataReport {\n-\n-    protected final static String DEFAULT_ROOT = \"dubbo\";\n-\n-    private static final int ONE_DAY_IN_MILLISECONDS = 60 * 24 * 60 * 1000;\n-    private static final int FOUR_HOURS_IN_MILLISECONDS = 60 * 4 * 60 * 1000;\n-    // Log output\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    // Local disk cache, where the special key value.registries records the list of metadata centers, and the others are the list of notified service providers\n-    final Properties properties = new Properties();\n-    private final ExecutorService reportCacheExecutor = Executors.newFixedThreadPool(1, new NamedThreadFactory(\"DubboSaveMetadataReport\", true));\n-    final Map<MetadataIdentifier, Object> allMetadataReports = new ConcurrentHashMap<>(4);\n-\n-    private final AtomicLong lastCacheChanged = new AtomicLong();\n-    final Map<MetadataIdentifier, Object> failedReports = new ConcurrentHashMap<>(4);\n-    private URL reportURL;\n-    boolean syncReport;\n-    // Local disk cache file\n-    File file;\n-    private AtomicBoolean initialized = new AtomicBoolean(false);\n-    public MetadataReportRetry metadataReportRetry;\n-\n-    public AbstractMetadataReport(URL reportServerURL) {\n-        setUrl(reportServerURL);\n-        // Start file save timer\n-        String defaultFilename = System.getProperty(\"user.home\") + \"/.dubbo/dubbo-metadata-\" + reportServerURL.getParameter(APPLICATION_KEY) + \"-\" + reportServerURL.getAddress().replaceAll(\":\", \"-\") + \".cache\";\n-        String filename = reportServerURL.getParameter(FILE_KEY, defaultFilename);\n-        File file = null;\n-        if (ConfigUtils.isNotEmpty(filename)) {\n-            file = new File(filename);\n-            if (!file.exists() && file.getParentFile() != null && !file.getParentFile().exists()) {\n-                if (!file.getParentFile().mkdirs()) {\n-                    throw new IllegalArgumentException(\"Invalid service store file \" + file + \", cause: Failed to create directory \" + file.getParentFile() + \"!\");\n-                }\n-            }\n-            // if this file exist, firstly delete it.\n-            if (!initialized.getAndSet(true) && file.exists()) {\n-                file.delete();\n-            }\n-        }\n-        this.file = file;\n-        loadProperties();\n-        syncReport = reportServerURL.getParameter(SYNC_REPORT_KEY, false);\n-        metadataReportRetry = new MetadataReportRetry(reportServerURL.getParameter(RETRY_TIMES_KEY, DEFAULT_METADATA_REPORT_RETRY_TIMES),\n-                reportServerURL.getParameter(RETRY_PERIOD_KEY, DEFAULT_METADATA_REPORT_RETRY_PERIOD));\n-        // cycle report the data switch\n-        if (reportServerURL.getParameter(CYCLE_REPORT_KEY, DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {\n-            ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"DubboMetadataReportTimer\", true));\n-            scheduler.scheduleAtFixedRate(this::publishAll, calculateStartTime(), ONE_DAY_IN_MILLISECONDS, TimeUnit.MILLISECONDS);\n-        }\n-    }\n-\n-    public URL getUrl() {\n-        return reportURL;\n-    }\n-\n-    protected void setUrl(URL url) {\n-        if (url == null) {\n-            throw new IllegalArgumentException(\"metadataReport url == null\");\n-        }\n-        this.reportURL = url;\n-    }\n-\n-    private void doSaveProperties(long version) {\n-        if (version < lastCacheChanged.get()) {\n-            return;\n-        }\n-        if (file == null) {\n-            return;\n-        }\n-        // Save\n-        try {\n-            File lockfile = new File(file.getAbsolutePath() + \".lock\");\n-            if (!lockfile.exists()) {\n-                lockfile.createNewFile();\n-            }\n-            try (RandomAccessFile raf = new RandomAccessFile(lockfile, \"rw\");\n-                 FileChannel channel = raf.getChannel()) {\n-                FileLock lock = channel.tryLock();\n-                if (lock == null) {\n-                    throw new IOException(\"Can not lock the metadataReport cache file \" + file.getAbsolutePath() + \", ignore and retry later, maybe multi java process use the file, please config: dubbo.metadata.file=xxx.properties\");\n-                }\n-                // Save\n-                try {\n-                    if (!file.exists()) {\n-                        file.createNewFile();\n-                    }\n-                    try (FileOutputStream outputFile = new FileOutputStream(file)) {\n-                        properties.store(outputFile, \"Dubbo metadataReport Cache\");\n-                    }\n-                } finally {\n-                    lock.release();\n-                }\n-            }\n-        } catch (Throwable e) {\n-            if (version < lastCacheChanged.get()) {\n-                return;\n-            } else {\n-                reportCacheExecutor.execute(new SaveProperties(lastCacheChanged.incrementAndGet()));\n-            }\n-            logger.warn(\"Failed to save service store file, cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    void loadProperties() {\n-        if (file != null && file.exists()) {\n-            try (InputStream in = new FileInputStream(file)) {\n-                properties.load(in);\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Load service store file \" + file + \", data: \" + properties);\n-                }\n-            } catch (Throwable e) {\n-                logger.warn(\"Failed to load service store file \" + file, e);\n-            }\n-        }\n-    }\n-\n-    private void saveProperties(MetadataIdentifier metadataIdentifier, String value, boolean add, boolean sync) {\n-        if (file == null) {\n-            return;\n-        }\n-\n-        try {\n-            if (add) {\n-                properties.setProperty(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY), value);\n-            } else {\n-                properties.remove(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));\n-            }\n-            long version = lastCacheChanged.incrementAndGet();\n-            if (sync) {\n-                new SaveProperties(version).run();\n-            } else {\n-                reportCacheExecutor.execute(new SaveProperties(version));\n-            }\n-\n-        } catch (Throwable t) {\n-            logger.warn(t.getMessage(), t);\n-        }\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return getUrl().toString();\n-    }\n-\n-    private class SaveProperties implements Runnable {\n-        private long version;\n-\n-        private SaveProperties(long version) {\n-            this.version = version;\n-        }\n-\n-        @Override\n-        public void run() {\n-            doSaveProperties(version);\n-        }\n-    }\n-\n-    @Override\n-    public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\n-        if (syncReport) {\n-            storeProviderMetadataTask(providerMetadataIdentifier, serviceDefinition);\n-        } else {\n-            reportCacheExecutor.execute(() -> storeProviderMetadataTask(providerMetadataIdentifier, serviceDefinition));\n-        }\n-    }\n-\n-    private void storeProviderMetadataTask(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\n-        try {\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"store provider metadata. Identifier : \" + providerMetadataIdentifier + \"; definition: \" + serviceDefinition);\n-            }\n-            allMetadataReports.put(providerMetadataIdentifier, serviceDefinition);\n-            failedReports.remove(providerMetadataIdentifier);\n-            Gson gson = new Gson();\n-            String data = gson.toJson(serviceDefinition);\n-            doStoreProviderMetadata(providerMetadataIdentifier, data);\n-            saveProperties(providerMetadataIdentifier, data, true, !syncReport);\n-        } catch (Exception e) {\n-            // retry again. If failed again, throw exception.\n-            failedReports.put(providerMetadataIdentifier, serviceDefinition);\n-            metadataReportRetry.startRetryTask();\n-            logger.error(\"Failed to put provider metadata \" + providerMetadataIdentifier + \" in  \" + serviceDefinition + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    @Override\n-    public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\n-        if (syncReport) {\n-            storeConsumerMetadataTask(consumerMetadataIdentifier, serviceParameterMap);\n-        } else {\n-            reportCacheExecutor.execute(() -> storeConsumerMetadataTask(consumerMetadataIdentifier, serviceParameterMap));\n-        }\n-    }\n-\n-    public void storeConsumerMetadataTask(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\n-        try {\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"store consumer metadata. Identifier : \" + consumerMetadataIdentifier + \"; definition: \" + serviceParameterMap);\n-            }\n-            allMetadataReports.put(consumerMetadataIdentifier, serviceParameterMap);\n-            failedReports.remove(consumerMetadataIdentifier);\n-\n-            Gson gson = new Gson();\n-            String data = gson.toJson(serviceParameterMap);\n-            doStoreConsumerMetadata(consumerMetadataIdentifier, data);\n-            saveProperties(consumerMetadataIdentifier, data, true, !syncReport);\n-        } catch (Exception e) {\n-            // retry again. If failed again, throw exception.\n-            failedReports.put(consumerMetadataIdentifier, serviceParameterMap);\n-            metadataReportRetry.startRetryTask();\n-            logger.error(\"Failed to put consumer metadata \" + consumerMetadataIdentifier + \";  \" + serviceParameterMap + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    @Override\n-    public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {\n-        if (syncReport) {\n-            doSaveMetadata(metadataIdentifier, url);\n-        } else {\n-            reportCacheExecutor.execute(() -> doSaveMetadata(metadataIdentifier, url));\n-        }\n-    }\n-\n-    @Override\n-    public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {\n-        if (syncReport) {\n-            doRemoveMetadata(metadataIdentifier);\n-        } else {\n-            reportCacheExecutor.execute(() -> doRemoveMetadata(metadataIdentifier));\n-        }\n-    }\n-\n-    @Override\n-    public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {\n-        // TODO, fallback to local cache\n-        return doGetExportedURLs(metadataIdentifier);\n-    }\n-\n-    @Override\n-    public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls) {\n-        if (syncReport) {\n-            doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls));\n-        } else {\n-            reportCacheExecutor.execute(() -> doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls)));\n-        }\n-    }\n-\n-\n-    @Override\n-    public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {\n-        String content = doGetSubscribedURLs(subscriberMetadataIdentifier);\n-        Type setType = new TypeToken<SortedSet<String>>() {\n-        }.getType();\n-        return new Gson().fromJson(content, setType);\n-    }\n-\n-    String getProtocol(URL url) {\n-        String protocol = url.getParameter(SIDE_KEY);\n-        protocol = protocol == null ? url.getProtocol() : protocol;\n-        return protocol;\n-    }\n-\n-    /**\n-     * @return if need to continue\n-     */\n-    public boolean retry() {\n-        return doHandleMetadataCollection(failedReports);\n-    }\n-\n-    private boolean doHandleMetadataCollection(Map<MetadataIdentifier, Object> metadataMap) {\n-        if (metadataMap.isEmpty()) {\n-            return true;\n-        }\n-        Iterator<Map.Entry<MetadataIdentifier, Object>> iterable = metadataMap.entrySet().iterator();\n-        while (iterable.hasNext()) {\n-            Map.Entry<MetadataIdentifier, Object> item = iterable.next();\n-            if (PROVIDER_SIDE.equals(item.getKey().getSide())) {\n-                this.storeProviderMetadata(item.getKey(), (FullServiceDefinition) item.getValue());\n-            } else if (CONSUMER_SIDE.equals(item.getKey().getSide())) {\n-                this.storeConsumerMetadata(item.getKey(), (Map) item.getValue());\n-            }\n-\n-        }\n-        return false;\n-    }\n-\n-    /**\n-     * not private. just for unittest.\n-     */\n-    void publishAll() {\n-        logger.info(\"start to publish all metadata.\");\n-        this.doHandleMetadataCollection(allMetadataReports);\n-    }\n-\n-    /**\n-     * between 2:00 am to 6:00 am, the time is random.\n-     *\n-     * @return\n-     */\n-    long calculateStartTime() {\n-        Calendar calendar = Calendar.getInstance();\n-        long nowMill = calendar.getTimeInMillis();\n-        calendar.set(Calendar.HOUR_OF_DAY, 0);\n-        calendar.set(Calendar.MINUTE, 0);\n-        calendar.set(Calendar.SECOND, 0);\n-        calendar.set(Calendar.MILLISECOND, 0);\n-        long subtract = calendar.getTimeInMillis() + ONE_DAY_IN_MILLISECONDS - nowMill;\n-        return subtract + (FOUR_HOURS_IN_MILLISECONDS / 2) + ThreadLocalRandom.current().nextInt(FOUR_HOURS_IN_MILLISECONDS);\n-    }\n-\n-    class MetadataReportRetry {\n-        protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-        final ScheduledExecutorService retryExecutor = Executors.newScheduledThreadPool(0, new NamedThreadFactory(\"DubboMetadataReportRetryTimer\", true));\n-        volatile ScheduledFuture retryScheduledFuture;\n-        final AtomicInteger retryCounter = new AtomicInteger(0);\n-        // retry task schedule period\n-        long retryPeriod;\n-        // if no failed report, wait how many times to run retry task.\n-        int retryTimesIfNonFail = 600;\n-\n-        int retryLimit;\n-\n-        public MetadataReportRetry(int retryTimes, int retryPeriod) {\n-            this.retryPeriod = retryPeriod;\n-            this.retryLimit = retryTimes;\n-        }\n-\n-        void startRetryTask() {\n-            if (retryScheduledFuture == null) {\n-                synchronized (retryCounter) {\n-                    if (retryScheduledFuture == null) {\n-                        retryScheduledFuture = retryExecutor.scheduleWithFixedDelay(new Runnable() {\n-                            @Override\n-                            public void run() {\n-                                // Check and connect to the metadata\n-                                try {\n-                                    int times = retryCounter.incrementAndGet();\n-                                    logger.info(\"start to retry task for metadata report. retry times:\" + times);\n-                                    if (retry() && times > retryTimesIfNonFail) {\n-                                        cancelRetryTask();\n-                                    }\n-                                    if (times > retryLimit) {\n-                                        cancelRetryTask();\n-                                    }\n-                                } catch (Throwable t) { // Defensive fault tolerance\n-                                    logger.error(\"Unexpected error occur at failed retry, cause: \" + t.getMessage(), t);\n-                                }\n-                            }\n-                        }, 500, retryPeriod, TimeUnit.MILLISECONDS);\n-                    }\n-                }\n-            }\n-        }\n-\n-        void cancelRetryTask() {\n-            retryScheduledFuture.cancel(false);\n-            retryExecutor.shutdown();\n-        }\n-    }\n-\n-    private void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, List<String> urls) {\n-        if (CollectionUtils.isEmpty(urls)) {\n-            return;\n-        }\n-        List<String> encodedUrlList = new ArrayList<>(urls.size());\n-        for (String url : urls) {\n-            encodedUrlList.add(URL.encode(url));\n-        }\n-        doSaveSubscriberData(subscriberMetadataIdentifier, encodedUrlList);\n-    }\n-\n-    protected abstract void doStoreProviderMetadata(MetadataIdentifier providerMetadataIdentifier, String serviceDefinitions);\n-\n-    protected abstract void doStoreConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, String serviceParameterString);\n-\n-    protected abstract void doSaveMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url);\n-\n-    protected abstract void doRemoveMetadata(ServiceMetadataIdentifier metadataIdentifier);\n-\n-    protected abstract List<String> doGetExportedURLs(ServiceMetadataIdentifier metadataIdentifier);\n-\n-    protected abstract void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, String urlListStr);\n-\n-    protected abstract String doGetSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);\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.metadata.report.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.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.ConfigUtils;\r\n+import org.apache.dubbo.common.utils.NamedThreadFactory;\r\n+import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+import org.apache.dubbo.metadata.report.MetadataReport;\r\n+import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;\r\n+import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\r\n+\r\n+import com.google.gson.Gson;\r\n+import com.google.gson.reflect.TypeToken;\r\n+\r\n+import java.io.File;\r\n+import java.io.FileInputStream;\r\n+import java.io.FileOutputStream;\r\n+import java.io.IOException;\r\n+import java.io.InputStream;\r\n+import java.io.RandomAccessFile;\r\n+import java.lang.reflect.Type;\r\n+import java.nio.channels.FileChannel;\r\n+import java.nio.channels.FileLock;\r\n+import java.util.ArrayList;\r\n+import java.util.Calendar;\r\n+import java.util.Iterator;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Properties;\r\n+import java.util.Set;\r\n+import java.util.SortedSet;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ExecutorService;\r\n+import java.util.concurrent.Executors;\r\n+import java.util.concurrent.ScheduledExecutorService;\r\n+import java.util.concurrent.ScheduledFuture;\r\n+import java.util.concurrent.ThreadLocalRandom;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+import java.util.concurrent.atomic.AtomicInteger;\r\n+import java.util.concurrent.atomic.AtomicLong;\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_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.FILE_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.metadata.report.support.Constants.CYCLE_REPORT_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_CYCLE_REPORT;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_PERIOD;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_TIMES;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.RETRY_PERIOD_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.RETRY_TIMES_KEY;\r\n+import static org.apache.dubbo.metadata.report.support.Constants.SYNC_REPORT_KEY;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+public abstract class AbstractMetadataReport implements MetadataReport {\r\n+\r\n+    protected final static String DEFAULT_ROOT = \"dubbo\";\r\n+\r\n+    private static final int ONE_DAY_IN_MILLISECONDS = 60 * 24 * 60 * 1000;\r\n+    private static final int FOUR_HOURS_IN_MILLISECONDS = 60 * 4 * 60 * 1000;\r\n+    // Log output\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    // Local disk cache, where the special key value.registries records the list of metadata centers, and the others are the list of notified service providers\r\n+    final Properties properties = new Properties();\r\n+    private final ExecutorService reportCacheExecutor = Executors.newFixedThreadPool(1, new NamedThreadFactory(\"DubboSaveMetadataReport\", true));\r\n+    final Map<MetadataIdentifier, Object> allMetadataReports = new ConcurrentHashMap<>(4);\r\n+\r\n+    private final AtomicLong lastCacheChanged = new AtomicLong();\r\n+    final Map<MetadataIdentifier, Object> failedReports = new ConcurrentHashMap<>(4);\r\n+    private URL reportURL;\r\n+    boolean syncReport;\r\n+    // Local disk cache file\r\n+    File file;\r\n+    private AtomicBoolean initialized = new AtomicBoolean(false);\r\n+    public MetadataReportRetry metadataReportRetry;\r\n+\r\n+    public AbstractMetadataReport(URL reportServerURL) {\r\n+        setUrl(reportServerURL);\r\n+        // Start file save timer\r\n+        String defaultFilename = System.getProperty(\"user.home\") + \"/.dubbo/dubbo-metadata-\" + reportServerURL.getParameter(APPLICATION_KEY) + \"-\" + reportServerURL.getAddress().replaceAll(\":\", \"-\") + \".cache\";\r\n+        String filename = reportServerURL.getParameter(FILE_KEY, defaultFilename);\r\n+        File file = null;\r\n+        if (ConfigUtils.isNotEmpty(filename)) {\r\n+            file = new File(filename);\r\n+            if (!file.exists() && file.getParentFile() != null && !file.getParentFile().exists()) {\r\n+                if (!file.getParentFile().mkdirs()) {\r\n+                    throw new IllegalArgumentException(\"Invalid service store file \" + file + \", cause: Failed to create directory \" + file.getParentFile() + \"!\");\r\n+                }\r\n+            }\r\n+            // if this file exist, firstly delete it.\r\n+            if (!initialized.getAndSet(true) && file.exists()) {\r\n+                file.delete();\r\n+            }\r\n+        }\r\n+        this.file = file;\r\n+        loadProperties();\r\n+        syncReport = reportServerURL.getParameter(SYNC_REPORT_KEY, false);\r\n+        metadataReportRetry = new MetadataReportRetry(reportServerURL.getParameter(RETRY_TIMES_KEY, DEFAULT_METADATA_REPORT_RETRY_TIMES),\r\n+                reportServerURL.getParameter(RETRY_PERIOD_KEY, DEFAULT_METADATA_REPORT_RETRY_PERIOD));\r\n+        // cycle report the data switch\r\n+        if (reportServerURL.getParameter(CYCLE_REPORT_KEY, DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {\r\n+            ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"DubboMetadataReportTimer\", true));\r\n+            scheduler.scheduleAtFixedRate(this::publishAll, calculateStartTime(), ONE_DAY_IN_MILLISECONDS, TimeUnit.MILLISECONDS);\r\n+        }\r\n+    }\r\n+\r\n+    public URL getUrl() {\r\n+        return reportURL;\r\n+    }\r\n+\r\n+    protected void setUrl(URL url) {\r\n+        if (url == null) {\r\n+            throw new IllegalArgumentException(\"metadataReport url == null\");\r\n+        }\r\n+        this.reportURL = url;\r\n+    }\r\n+\r\n+    private void doSaveProperties(long version) {\r\n+        if (version < lastCacheChanged.get()) {\r\n+            return;\r\n+        }\r\n+        if (file == null) {\r\n+            return;\r\n+        }\r\n+        // Save\r\n+        try {\r\n+            File lockfile = new File(file.getAbsolutePath() + \".lock\");\r\n+            if (!lockfile.exists()) {\r\n+                lockfile.createNewFile();\r\n+            }\r\n+            try (RandomAccessFile raf = new RandomAccessFile(lockfile, \"rw\");\r\n+                 FileChannel channel = raf.getChannel()) {\r\n+                FileLock lock = channel.tryLock();\r\n+                if (lock == null) {\r\n+                    throw new IOException(\"Can not lock the metadataReport cache file \" + file.getAbsolutePath() + \", ignore and retry later, maybe multi java process use the file, please config: dubbo.metadata.file=xxx.properties\");\r\n+                }\r\n+                // Save\r\n+                try {\r\n+                    if (!file.exists()) {\r\n+                        file.createNewFile();\r\n+                    }\r\n+                    try (FileOutputStream outputFile = new FileOutputStream(file)) {\r\n+                        properties.store(outputFile, \"Dubbo metadataReport Cache\");\r\n+                    }\r\n+                } finally {\r\n+                    lock.release();\r\n+                }\r\n+            }\r\n+        } catch (Throwable e) {\r\n+            if (version < lastCacheChanged.get()) {\r\n+                return;\r\n+            } else {\r\n+                reportCacheExecutor.execute(new SaveProperties(lastCacheChanged.incrementAndGet()));\r\n+            }\r\n+            logger.warn(\"Failed to save service store file, cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    void loadProperties() {\r\n+        if (file != null && file.exists()) {\r\n+            try (InputStream in = new FileInputStream(file)) {\r\n+                properties.load(in);\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Load service store file \" + file + \", data: \" + properties);\r\n+                }\r\n+            } catch (Throwable e) {\r\n+                logger.warn(\"Failed to load service store file \" + file, e);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void saveProperties(MetadataIdentifier metadataIdentifier, String value, boolean add, boolean sync) {\r\n+        if (file == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        try {\r\n+            if (add) {\r\n+                properties.setProperty(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY), value);\r\n+            } else {\r\n+                properties.remove(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));\r\n+            }\r\n+            long version = lastCacheChanged.incrementAndGet();\r\n+            if (sync) {\r\n+                new SaveProperties(version).run();\r\n+            } else {\r\n+                reportCacheExecutor.execute(new SaveProperties(version));\r\n+            }\r\n+\r\n+        } catch (Throwable t) {\r\n+            logger.warn(t.getMessage(), t);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return getUrl().toString();\r\n+    }\r\n+\r\n+    private class SaveProperties implements Runnable {\r\n+        private long version;\r\n+\r\n+        private SaveProperties(long version) {\r\n+            this.version = version;\r\n+        }\r\n+\r\n+        @Override\r\n+        public void run() {\r\n+            doSaveProperties(version);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\r\n+        if (syncReport) {\r\n+            storeProviderMetadataTask(providerMetadataIdentifier, serviceDefinition);\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> storeProviderMetadataTask(providerMetadataIdentifier, serviceDefinition));\r\n+        }\r\n+    }\r\n+\r\n+    private void storeProviderMetadataTask(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\r\n+        try {\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"store provider metadata. Identifier : \" + providerMetadataIdentifier + \"; definition: \" + serviceDefinition);\r\n+            }\r\n+            allMetadataReports.put(providerMetadataIdentifier, serviceDefinition);\r\n+            failedReports.remove(providerMetadataIdentifier);\r\n+            Gson gson = new Gson();\r\n+            String data = gson.toJson(serviceDefinition);\r\n+            doStoreProviderMetadata(providerMetadataIdentifier, data);\r\n+            saveProperties(providerMetadataIdentifier, data, true, !syncReport);\r\n+        } catch (Exception e) {\r\n+            // retry again. If failed again, throw exception.\r\n+            failedReports.put(providerMetadataIdentifier, serviceDefinition);\r\n+            metadataReportRetry.startRetryTask();\r\n+            logger.error(\"Failed to put provider metadata \" + providerMetadataIdentifier + \" in  \" + serviceDefinition + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\r\n+        if (syncReport) {\r\n+            storeConsumerMetadataTask(consumerMetadataIdentifier, serviceParameterMap);\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> storeConsumerMetadataTask(consumerMetadataIdentifier, serviceParameterMap));\r\n+        }\r\n+    }\r\n+\r\n+    public void storeConsumerMetadataTask(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\r\n+        try {\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"store consumer metadata. Identifier : \" + consumerMetadataIdentifier + \"; definition: \" + serviceParameterMap);\r\n+            }\r\n+            allMetadataReports.put(consumerMetadataIdentifier, serviceParameterMap);\r\n+            failedReports.remove(consumerMetadataIdentifier);\r\n+\r\n+            Gson gson = new Gson();\r\n+            String data = gson.toJson(serviceParameterMap);\r\n+            doStoreConsumerMetadata(consumerMetadataIdentifier, data);\r\n+            saveProperties(consumerMetadataIdentifier, data, true, !syncReport);\r\n+        } catch (Exception e) {\r\n+            // retry again. If failed again, throw exception.\r\n+            failedReports.put(consumerMetadataIdentifier, serviceParameterMap);\r\n+            metadataReportRetry.startRetryTask();\r\n+            logger.error(\"Failed to put consumer metadata \" + consumerMetadataIdentifier + \";  \" + serviceParameterMap + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {\r\n+        if (syncReport) {\r\n+            doSaveMetadata(metadataIdentifier, url);\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> doSaveMetadata(metadataIdentifier, url));\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {\r\n+        if (syncReport) {\r\n+            doRemoveMetadata(metadataIdentifier);\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> doRemoveMetadata(metadataIdentifier));\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {\r\n+        // TODO, fallback to local cache\r\n+        return doGetExportedURLs(metadataIdentifier);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls) {\r\n+        if (syncReport) {\r\n+            doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls));\r\n+        } else {\r\n+            reportCacheExecutor.execute(() -> doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls)));\r\n+        }\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {\r\n+        String content = doGetSubscribedURLs(subscriberMetadataIdentifier);\r\n+        Type setType = new TypeToken<SortedSet<String>>() {\r\n+        }.getType();\r\n+        return new Gson().fromJson(content, setType);\r\n+    }\r\n+\r\n+    String getProtocol(URL url) {\r\n+        String protocol = url.getParameter(SIDE_KEY);\r\n+        protocol = protocol == null ? url.getProtocol() : protocol;\r\n+        return protocol;\r\n+    }\r\n+\r\n+    /**\r\n+     * @return if need to continue\r\n+     */\r\n+    public boolean retry() {\r\n+        return doHandleMetadataCollection(failedReports);\r\n+    }\r\n+\r\n+    private boolean doHandleMetadataCollection(Map<MetadataIdentifier, Object> metadataMap) {\r\n+        if (metadataMap.isEmpty()) {\r\n+            return true;\r\n+        }\r\n+        Iterator<Map.Entry<MetadataIdentifier, Object>> iterable = metadataMap.entrySet().iterator();\r\n+        while (iterable.hasNext()) {\r\n+            Map.Entry<MetadataIdentifier, Object> item = iterable.next();\r\n+            if (PROVIDER_SIDE.equals(item.getKey().getSide())) {\r\n+                this.storeProviderMetadata(item.getKey(), (FullServiceDefinition) item.getValue());\r\n+            } else if (CONSUMER_SIDE.equals(item.getKey().getSide())) {\r\n+                this.storeConsumerMetadata(item.getKey(), (Map) item.getValue());\r\n+            }\r\n+\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    /**\r\n+     * not private. just for unittest.\r\n+     */\r\n+    void publishAll() {\r\n+        logger.info(\"start to publish all metadata.\");\r\n+        this.doHandleMetadataCollection(allMetadataReports);\r\n+    }\r\n+\r\n+    /**\r\n+     * between 2:00 am to 6:00 am, the time is random.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    long calculateStartTime() {\r\n+        Calendar calendar = Calendar.getInstance();\r\n+        long nowMill = calendar.getTimeInMillis();\r\n+        calendar.set(Calendar.HOUR_OF_DAY, 0);\r\n+        calendar.set(Calendar.MINUTE, 0);\r\n+        calendar.set(Calendar.SECOND, 0);\r\n+        calendar.set(Calendar.MILLISECOND, 0);\r\n+        long subtract = calendar.getTimeInMillis() + ONE_DAY_IN_MILLISECONDS - nowMill;\r\n+        return subtract + (FOUR_HOURS_IN_MILLISECONDS / 2) + ThreadLocalRandom.current().nextInt(FOUR_HOURS_IN_MILLISECONDS);\r\n+    }\r\n+\r\n+    class MetadataReportRetry {\r\n+        protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+        final ScheduledExecutorService retryExecutor = Executors.newScheduledThreadPool(0, new NamedThreadFactory(\"DubboMetadataReportRetryTimer\", true));\r\n+        volatile ScheduledFuture retryScheduledFuture;\r\n+        final AtomicInteger retryCounter = new AtomicInteger(0);\r\n+        // retry task schedule period\r\n+        long retryPeriod;\r\n+        // if no failed report, wait how many times to run retry task.\r\n+        int retryTimesIfNonFail = 600;\r\n+\r\n+        int retryLimit;\r\n+\r\n+        public MetadataReportRetry(int retryTimes, int retryPeriod) {\r\n+            this.retryPeriod = retryPeriod;\r\n+            this.retryLimit = retryTimes;\r\n+        }\r\n+\r\n+        void startRetryTask() {\r\n+            if (retryScheduledFuture == null) {\r\n+                synchronized (retryCounter) {\r\n+                    if (retryScheduledFuture == null) {\r\n+                        retryScheduledFuture = retryExecutor.scheduleWithFixedDelay(new Runnable() {\r\n+                            @Override\r\n+                            public void run() {\r\n+                                // Check and connect to the metadata\r\n+                                try {\r\n+                                    int times = retryCounter.incrementAndGet();\r\n+                                    logger.info(\"start to retry task for metadata report. retry times:\" + times);\r\n+                                    if (retry() && times > retryTimesIfNonFail) {\r\n+                                        cancelRetryTask();\r\n+                                    }\r\n+                                    if (times > retryLimit) {\r\n+                                        cancelRetryTask();\r\n+                                    }\r\n+                                } catch (Throwable t) { // Defensive fault tolerance\r\n+                                    logger.error(\"Unexpected error occur at failed retry, cause: \" + t.getMessage(), t);\r\n+                                }\r\n+                            }\r\n+                        }, 500, retryPeriod, TimeUnit.MILLISECONDS);\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        void cancelRetryTask() {\r\n+            retryScheduledFuture.cancel(false);\r\n+            retryExecutor.shutdown();\r\n+        }\r\n+    }\r\n+\r\n+    private void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, List<String> urls) {\r\n+        if (CollectionUtils.isEmpty(urls)) {\r\n+            return;\r\n+        }\r\n+        List<String> encodedUrlList = new ArrayList<>(urls.size());\r\n+        for (String url : urls) {\r\n+            encodedUrlList.add(URL.encode(url));\r\n+        }\r\n+        doSaveSubscriberData(subscriberMetadataIdentifier, encodedUrlList);\r\n+    }\r\n+\r\n+    protected abstract void doStoreProviderMetadata(MetadataIdentifier providerMetadataIdentifier, String serviceDefinitions);\r\n+\r\n+    protected abstract void doStoreConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, String serviceParameterString);\r\n+\r\n+    protected abstract void doSaveMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url);\r\n+\r\n+    protected abstract void doRemoveMetadata(ServiceMetadataIdentifier metadataIdentifier);\r\n+\r\n+    protected abstract List<String> doGetExportedURLs(ServiceMetadataIdentifier metadataIdentifier);\r\n+\r\n+    protected abstract void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, String urlListStr);\r\n+\r\n+    protected abstract String doGetSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java", "source2": "org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.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-package org.apache.dubbo.metadata.report.support;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.metadata.report.MetadataReport;\n-import org.apache.dubbo.metadata.report.MetadataReportFactory;\n-\n-import java.util.Map;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.locks.ReentrantLock;\n-\n-public abstract class AbstractMetadataReportFactory implements MetadataReportFactory {\n-    private static final String EXPORT_KEY = \"export\";\n-    private static final String REFER_KEY = \"refer\";\n-\n-    // The lock for the acquisition process of the registry\n-    private static final ReentrantLock LOCK = new ReentrantLock();\n-\n-    // Registry Collection Map<metadataAddress, MetadataReport>\n-    private static final Map<String, MetadataReport> SERVICE_STORE_MAP = new ConcurrentHashMap<String, MetadataReport>();\n-\n-    @Override\n-    public MetadataReport getMetadataReport(URL url) {\n-        url = url.setPath(MetadataReport.class.getName())\n-                .removeParameters(EXPORT_KEY, REFER_KEY);\n-        String key = url.toServiceString();\n-        // Lock the metadata access process to ensure a single instance of the metadata instance\n-        LOCK.lock();\n-        try {\n-            MetadataReport metadataReport = SERVICE_STORE_MAP.get(key);\n-            if (metadataReport != null) {\n-                return metadataReport;\n-            }\n-            metadataReport = createMetadataReport(url);\n-            if (metadataReport == null) {\n-                throw new IllegalStateException(\"Can not create metadata Report \" + url);\n-            }\n-            SERVICE_STORE_MAP.put(key, metadataReport);\n-            return metadataReport;\n-        } finally {\n-            // Release the lock\n-            LOCK.unlock();\n-        }\n-    }\n-\n-    protected abstract MetadataReport createMetadataReport(URL 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.metadata.report.support;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.metadata.report.MetadataReport;\r\n+import org.apache.dubbo.metadata.report.MetadataReportFactory;\r\n+\r\n+import java.util.Map;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.locks.ReentrantLock;\r\n+\r\n+public abstract class AbstractMetadataReportFactory implements MetadataReportFactory {\r\n+    private static final String EXPORT_KEY = \"export\";\r\n+    private static final String REFER_KEY = \"refer\";\r\n+\r\n+    // The lock for the acquisition process of the registry\r\n+    private static final ReentrantLock LOCK = new ReentrantLock();\r\n+\r\n+    // Registry Collection Map<metadataAddress, MetadataReport>\r\n+    private static final Map<String, MetadataReport> SERVICE_STORE_MAP = new ConcurrentHashMap<String, MetadataReport>();\r\n+\r\n+    @Override\r\n+    public MetadataReport getMetadataReport(URL url) {\r\n+        url = url.setPath(MetadataReport.class.getName())\r\n+                .removeParameters(EXPORT_KEY, REFER_KEY);\r\n+        String key = url.toServiceString();\r\n+        // Lock the metadata access process to ensure a single instance of the metadata instance\r\n+        LOCK.lock();\r\n+        try {\r\n+            MetadataReport metadataReport = SERVICE_STORE_MAP.get(key);\r\n+            if (metadataReport != null) {\r\n+                return metadataReport;\r\n+            }\r\n+            metadataReport = createMetadataReport(url);\r\n+            if (metadataReport == null) {\r\n+                throw new IllegalStateException(\"Can not create metadata Report \" + url);\r\n+            }\r\n+            SERVICE_STORE_MAP.put(key, metadataReport);\r\n+            return metadataReport;\r\n+        } finally {\r\n+            // Release the lock\r\n+            LOCK.unlock();\r\n+        }\r\n+    }\r\n+\r\n+    protected abstract MetadataReport createMetadataReport(URL url);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/report/support/Constants.java", "source2": "org/apache/dubbo/metadata/report/support/Constants.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,36 +1,36 @@\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.metadata.report.support;\n-\n-public interface Constants {\n-    String METADATA_REPORT_KEY = \"metadata\";\n-\n-    String RETRY_TIMES_KEY = \"retry.times\";\n-\n-    Integer DEFAULT_METADATA_REPORT_RETRY_TIMES = 100;\n-\n-    String RETRY_PERIOD_KEY = \"retry.period\";\n-\n-    Integer DEFAULT_METADATA_REPORT_RETRY_PERIOD = 3000;\n-\n-    String SYNC_REPORT_KEY = \"sync.report\";\n-\n-    String CYCLE_REPORT_KEY = \"cycle.report\";\n-\n-    Boolean DEFAULT_METADATA_REPORT_CYCLE_REPORT = true;\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.metadata.report.support;\r\n+\r\n+public interface Constants {\r\n+    String METADATA_REPORT_KEY = \"metadata\";\r\n+\r\n+    String RETRY_TIMES_KEY = \"retry.times\";\r\n+\r\n+    Integer DEFAULT_METADATA_REPORT_RETRY_TIMES = 100;\r\n+\r\n+    String RETRY_PERIOD_KEY = \"retry.period\";\r\n+\r\n+    Integer DEFAULT_METADATA_REPORT_RETRY_PERIOD = 3000;\r\n+\r\n+    String SYNC_REPORT_KEY = \"sync.report\";\r\n+\r\n+    String CYCLE_REPORT_KEY = \"cycle.report\";\r\n+\r\n+    Boolean DEFAULT_METADATA_REPORT_CYCLE_REPORT = true;\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/AbstractAnnotatedMethodParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/AbstractAnnotatedMethodParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,51 +1,51 @@\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.metadata.rest;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Parameter;\n-\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getValue;\n-import static org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractAnnotatedMethodParameterProcessor implements AnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public void process(Annotation annotation, Parameter parameter, int parameterIndex, Method method,\n-                        Class<?> serviceType, Class<?> serviceInterfaceClass, RestMethodMetadata restMethodMetadata) {\n-        String annotationValue = getAnnotationValue(annotation, parameter, parameterIndex);\n-        String defaultValue = getDefaultValue(annotation, parameter, parameterIndex);\n-        process(annotationValue, defaultValue, annotation, parameter, parameterIndex, method, restMethodMetadata);\n-    }\n-\n-    protected String getAnnotationValue(Annotation annotation, Parameter parameter, int parameterIndex) {\n-        return getValue(annotation);\n-    }\n-\n-    protected String getDefaultValue(Annotation annotation, Parameter parameter, int parameterIndex) {\n-        return buildDefaultValue(parameterIndex);\n-    }\n-\n-    protected abstract void process(String annotationValue, String defaultValue, Annotation annotation, Object parameter,\n-                                    int parameterIndex, Method method, RestMethodMetadata restMethodMetadata);\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.metadata.rest;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Parameter;\r\n+\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getValue;\r\n+import static org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractAnnotatedMethodParameterProcessor implements AnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public void process(Annotation annotation, Parameter parameter, int parameterIndex, Method method,\r\n+                        Class<?> serviceType, Class<?> serviceInterfaceClass, RestMethodMetadata restMethodMetadata) {\r\n+        String annotationValue = getAnnotationValue(annotation, parameter, parameterIndex);\r\n+        String defaultValue = getDefaultValue(annotation, parameter, parameterIndex);\r\n+        process(annotationValue, defaultValue, annotation, parameter, parameterIndex, method, restMethodMetadata);\r\n+    }\r\n+\r\n+    protected String getAnnotationValue(Annotation annotation, Parameter parameter, int parameterIndex) {\r\n+        return getValue(annotation);\r\n+    }\r\n+\r\n+    protected String getDefaultValue(Annotation annotation, Parameter parameter, int parameterIndex) {\r\n+        return buildDefaultValue(parameterIndex);\r\n+    }\r\n+\r\n+    protected abstract void process(String annotationValue, String defaultValue, Annotation annotation, Object parameter,\r\n+                                    int parameterIndex, Method method, RestMethodMetadata restMethodMetadata);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,343 +1,343 @@\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.metadata.rest;\n-\n-import org.apache.dubbo.common.utils.MethodComparator;\n-import org.apache.dubbo.common.utils.ServiceAnnotationResolver;\n-import org.apache.dubbo.config.annotation.DubboService;\n-import org.apache.dubbo.config.annotation.Service;\n-import org.apache.dubbo.metadata.definition.MethodDefinitionBuilder;\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Parameter;\n-import java.util.ArrayList;\n-import java.util.LinkedHashMap;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.function.Consumer;\n-\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.sort;\n-import static java.util.Collections.unmodifiableMap;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.common.function.ThrowableFunction.execute;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.isAnyAnnotationPresent;\n-import static org.apache.dubbo.common.utils.ClassUtils.forName;\n-import static org.apache.dubbo.common.utils.ClassUtils.getAllInterfaces;\n-import static org.apache.dubbo.common.utils.MethodUtils.excludedDeclaredClass;\n-import static org.apache.dubbo.common.utils.MethodUtils.getAllMethods;\n-import static org.apache.dubbo.common.utils.MethodUtils.overrides;\n-\n-/**\n- * The abstract {@link ServiceRestMetadataResolver} class to provider some template methods assemble the instance of\n- * {@link ServiceRestMetadata} will extended by the sub-classes.\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractServiceRestMetadataResolver implements ServiceRestMetadataResolver {\n-\n-    private final Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap;\n-\n-    public AbstractServiceRestMetadataResolver() {\n-        this.parameterProcessorsMap = loadAnnotatedMethodParameterProcessors();\n-    }\n-\n-    @Override\n-    public final boolean supports(Class<?> serviceType) {\n-        return isImplementedInterface(serviceType) && isServiceAnnotationPresent(serviceType) && supports0(serviceType);\n-    }\n-\n-    protected final boolean isImplementedInterface(Class<?> serviceType) {\n-        return !getAllInterfaces(serviceType).isEmpty();\n-    }\n-\n-    protected final boolean isServiceAnnotationPresent(Class<?> serviceType) {\n-        return isAnyAnnotationPresent(serviceType, DubboService.class, Service.class,\n-                com.alibaba.dubbo.config.annotation.Service.class);\n-    }\n-\n-    /**\n-     * internal support method\n-     *\n-     * @param serviceType Dubbo Service interface or type\n-     * @return If supports, return <code>true</code>, or <code>false</code>\n-     */\n-    protected abstract boolean supports0(Class<?> serviceType);\n-\n-    @Override\n-    public final ServiceRestMetadata resolve(Class<?> serviceType) {\n-\n-        ServiceRestMetadata serviceRestMetadata = new ServiceRestMetadata();\n-\n-        // Process ServiceRestMetadata\n-        processServiceRestMetadata(serviceRestMetadata, serviceType);\n-\n-        // Process RestMethodMetadata\n-        processAllRestMethodMetadata(serviceRestMetadata, serviceType);\n-\n-        return serviceRestMetadata;\n-    }\n-\n-    /**\n-     * Process the service type including the sub-routines:\n-     * <ul>\n-     *     <li>{@link ServiceRestMetadata#setServiceInterface(String)}</li>\n-     *     <li>{@link ServiceRestMetadata#setVersion(String)}</li>\n-     *     <li>{@link ServiceRestMetadata#setGroup(String)}</li>\n-     * </ul>\n-     *\n-     * @param serviceRestMetadata {@link ServiceRestMetadata}\n-     * @param serviceType         Dubbo Service interface or type\n-     */\n-    protected void processServiceRestMetadata(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\n-        ServiceAnnotationResolver resolver = new ServiceAnnotationResolver(serviceType);\n-        serviceRestMetadata.setServiceInterface(resolver.resolveInterfaceClassName());\n-        serviceRestMetadata.setVersion(resolver.resolveVersion());\n-        serviceRestMetadata.setGroup(resolver.resolveGroup());\n-    }\n-\n-    /**\n-     * Process all {@link RestMethodMetadata}\n-     *\n-     * @param serviceRestMetadata {@link ServiceRestMetadata}\n-     * @param serviceType         Dubbo Service interface or type\n-     */\n-    protected void processAllRestMethodMetadata(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\n-        Class<?> serviceInterfaceClass = resolveServiceInterfaceClass(serviceRestMetadata, serviceType);\n-        Map<Method, Method> serviceMethodsMap = resolveServiceMethodsMap(serviceType, serviceInterfaceClass);\n-        for (Map.Entry<Method, Method> entry : serviceMethodsMap.entrySet()) {\n-            // try the overrider method first\n-            Method serviceMethod = entry.getKey();\n-            // If failed, it indicates the overrider method does not contain metadata , then try the declared method\n-            if (!processRestMethodMetadata(serviceMethod, serviceType, serviceInterfaceClass, serviceRestMetadata.getMeta()::add)) {\n-                Method declaredServiceMethod = entry.getValue();\n-                processRestMethodMetadata(declaredServiceMethod, serviceType, serviceInterfaceClass,\n-                        serviceRestMetadata.getMeta()::add);\n-            }\n-        }\n-    }\n-\n-    /**\n-     * Resolve a map of all public services methods from the specified service type and its interface class, whose key is the\n-     * declared method, and the value is the overrider method\n-     *\n-     * @param serviceType           the service interface implementation class\n-     * @param serviceInterfaceClass the service interface class\n-     * @return non-null read-only {@link Map}\n-     */\n-    protected Map<Method, Method> resolveServiceMethodsMap(Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        Map<Method, Method> serviceMethodsMap = new LinkedHashMap<>();\n-        // exclude the public methods declared in java.lang.Object.class\n-        List<Method> declaredServiceMethods = new ArrayList<>(getAllMethods(serviceInterfaceClass, excludedDeclaredClass(Object.class)));\n-        List<Method> serviceMethods = new ArrayList<>(getAllMethods(serviceType, excludedDeclaredClass(Object.class)));\n-\n-        // sort methods\n-        sort(declaredServiceMethods, MethodComparator.INSTANCE);\n-        sort(serviceMethods, MethodComparator.INSTANCE);\n-\n-        for (Method declaredServiceMethod : declaredServiceMethods) {\n-            for (Method serviceMethod : serviceMethods) {\n-                if (overrides(serviceMethod, declaredServiceMethod)) {\n-                    serviceMethodsMap.put(serviceMethod, declaredServiceMethod);\n-                    continue;\n-                }\n-            }\n-        }\n-        // make them to be read-only\n-        return unmodifiableMap(serviceMethodsMap);\n-    }\n-\n-    /**\n-     * Resolve the class of Dubbo Service interface\n-     *\n-     * @param serviceRestMetadata {@link ServiceRestMetadata}\n-     * @param serviceType         Dubbo Service interface or type\n-     * @return non-null\n-     * @throws RuntimeException If the class is not found, the {@link RuntimeException} wraps the cause will be thrown\n-     */\n-    protected Class<?> resolveServiceInterfaceClass(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\n-        return execute(serviceType.getClassLoader(), classLoader -> {\n-            String serviceInterface = serviceRestMetadata.getServiceInterface();\n-            return forName(serviceInterface, classLoader);\n-        });\n-    }\n-\n-    /**\n-     * Process the single {@link RestMethodMetadata} by the specified {@link Consumer} if present\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @param metadataToProcess     {@link RestMethodMetadata} to process if present\n-     * @return if processed successfully, return <code>true</code>, or <code>false</code>\n-     */\n-    protected boolean processRestMethodMetadata(Method serviceMethod, Class<?> serviceType,\n-                                                Class<?> serviceInterfaceClass,\n-                                                Consumer<RestMethodMetadata> metadataToProcess) {\n-\n-        if (!isRestCapableMethod(serviceMethod, serviceType, serviceInterfaceClass)) {\n-            return false;\n-        }\n-\n-        String requestPath = resolveRequestPath(serviceMethod, serviceType, serviceInterfaceClass); // requestPath is required\n-\n-        if (requestPath == null) {\n-            return false;\n-        }\n-\n-        String requestMethod = resolveRequestMethod(serviceMethod, serviceType, serviceInterfaceClass); // requestMethod is required\n-\n-        if (requestMethod == null) {\n-            return false;\n-        }\n-\n-        RestMethodMetadata metadata = new RestMethodMetadata();\n-\n-        MethodDefinition methodDefinition = resolveMethodDefinition(serviceMethod, serviceType, serviceInterfaceClass);\n-        // Set MethodDefinition\n-        metadata.setMethod(methodDefinition);\n-\n-        // process the annotated method parameters\n-        processAnnotatedMethodParameters(serviceMethod, serviceType, serviceInterfaceClass, metadata);\n-\n-        // process produces\n-        Set<String> produces = new LinkedHashSet<>();\n-        processProduces(serviceMethod, serviceType, serviceInterfaceClass, produces);\n-\n-        // process consumes\n-        Set<String> consumes = new LinkedHashSet<>();\n-        processConsumes(serviceMethod, serviceType, serviceInterfaceClass, consumes);\n-\n-        // Initialize RequestMetadata\n-        RequestMetadata request = metadata.getRequest();\n-        request.setPath(requestPath);\n-        request.setMethod(requestMethod);\n-        request.setProduces(produces);\n-        request.setConsumes(consumes);\n-\n-        // Post-Process\n-        postResolveRestMethodMetadata(serviceMethod, serviceType, serviceInterfaceClass, metadata);\n-\n-        // Accept RestMethodMetadata\n-        metadataToProcess.accept(metadata);\n-\n-        return true;\n-    }\n-\n-    /**\n-     * Test the service method is capable of REST or not?\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @return If capable, return <code>true</code>\n-     */\n-    protected abstract boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass);\n-\n-    /**\n-     * Resolve the request method\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @return if can't be resolve, return <code>null</code>\n-     */\n-    protected abstract String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass);\n-\n-    /**\n-     * Resolve the request path\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @return if can't be resolve, return <code>null</code>\n-     */\n-    protected abstract String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass);\n-\n-    /**\n-     * Resolve the {@link MethodDefinition}\n-     *\n-     * @param serviceMethod         Dubbo Service method\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @return if can't be resolve, return <code>null</code>\n-     * @see MethodDefinitionBuilder\n-     */\n-    protected MethodDefinition resolveMethodDefinition(Method serviceMethod, Class<?> serviceType,\n-                                                       Class<?> serviceInterfaceClass) {\n-        MethodDefinitionBuilder builder = new MethodDefinitionBuilder();\n-        return builder.build(serviceMethod);\n-    }\n-\n-    private void processAnnotatedMethodParameters(Method serviceMethod, Class<?> serviceType,\n-                                                  Class<?> serviceInterfaceClass, RestMethodMetadata metadata) {\n-        int paramCount = serviceMethod.getParameterCount();\n-        Parameter[] parameters = serviceMethod.getParameters();\n-        for (int i = 0; i < paramCount; i++) {\n-            Parameter parameter = parameters[i];\n-            // Add indexed parameter name\n-            metadata.addIndexToName(i, parameter.getName());\n-            processAnnotatedMethodParameter(parameter, i, serviceMethod, serviceType, serviceInterfaceClass, metadata);\n-        }\n-    }\n-\n-    private void processAnnotatedMethodParameter(Parameter parameter, int parameterIndex, Method serviceMethod,\n-                                                 Class<?> serviceType, Class<?> serviceInterfaceClass,\n-                                                 RestMethodMetadata metadata) {\n-        Annotation[] annotations = parameter.getAnnotations();\n-        for (Annotation annotation : annotations) {\n-            String annotationType = annotation.annotationType().getName();\n-            parameterProcessorsMap.getOrDefault(annotationType, emptyList())\n-                    .forEach(processor -> {\n-                        processor.process(annotation, parameter, parameterIndex, serviceMethod, serviceType,\n-                                serviceInterfaceClass, metadata);\n-                    });\n-        }\n-    }\n-\n-    protected abstract void processProduces(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass,\n-                                            Set<String> produces);\n-\n-    protected abstract void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?>\n-            serviceInterfaceClass,\n-                                            Set<String> consumes);\n-\n-    protected void postResolveRestMethodMetadata(Method serviceMethod, Class<?> serviceType,\n-                                                 Class<?> serviceInterfaceClass, RestMethodMetadata metadata) {\n-    }\n-\n-    private static Map<String, List<AnnotatedMethodParameterProcessor>> loadAnnotatedMethodParameterProcessors() {\n-        Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = new LinkedHashMap<>();\n-        getExtensionLoader(AnnotatedMethodParameterProcessor.class)\n-                .getSupportedExtensionInstances()\n-                .forEach(processor -> {\n-                    List<AnnotatedMethodParameterProcessor> processors =\n-                            parameterProcessorsMap.computeIfAbsent(processor.getAnnotationType(), k -> new LinkedList<>());\n-                    processors.add(processor);\n-                });\n-        return parameterProcessorsMap;\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.metadata.rest;\r\n+\r\n+import org.apache.dubbo.common.utils.MethodComparator;\r\n+import org.apache.dubbo.common.utils.ServiceAnnotationResolver;\r\n+import org.apache.dubbo.config.annotation.DubboService;\r\n+import org.apache.dubbo.config.annotation.Service;\r\n+import org.apache.dubbo.metadata.definition.MethodDefinitionBuilder;\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Parameter;\r\n+import java.util.ArrayList;\r\n+import java.util.LinkedHashMap;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.function.Consumer;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.sort;\r\n+import static java.util.Collections.unmodifiableMap;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.common.function.ThrowableFunction.execute;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.isAnyAnnotationPresent;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.forName;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getAllInterfaces;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.excludedDeclaredClass;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.getAllMethods;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.overrides;\r\n+\r\n+/**\r\n+ * The abstract {@link ServiceRestMetadataResolver} class to provider some template methods assemble the instance of\r\n+ * {@link ServiceRestMetadata} will extended by the sub-classes.\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractServiceRestMetadataResolver implements ServiceRestMetadataResolver {\r\n+\r\n+    private final Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap;\r\n+\r\n+    public AbstractServiceRestMetadataResolver() {\r\n+        this.parameterProcessorsMap = loadAnnotatedMethodParameterProcessors();\r\n+    }\r\n+\r\n+    @Override\r\n+    public final boolean supports(Class<?> serviceType) {\r\n+        return isImplementedInterface(serviceType) && isServiceAnnotationPresent(serviceType) && supports0(serviceType);\r\n+    }\r\n+\r\n+    protected final boolean isImplementedInterface(Class<?> serviceType) {\r\n+        return !getAllInterfaces(serviceType).isEmpty();\r\n+    }\r\n+\r\n+    protected final boolean isServiceAnnotationPresent(Class<?> serviceType) {\r\n+        return isAnyAnnotationPresent(serviceType, DubboService.class, Service.class,\r\n+                com.alibaba.dubbo.config.annotation.Service.class);\r\n+    }\r\n+\r\n+    /**\r\n+     * internal support method\r\n+     *\r\n+     * @param serviceType Dubbo Service interface or type\r\n+     * @return If supports, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    protected abstract boolean supports0(Class<?> serviceType);\r\n+\r\n+    @Override\r\n+    public final ServiceRestMetadata resolve(Class<?> serviceType) {\r\n+\r\n+        ServiceRestMetadata serviceRestMetadata = new ServiceRestMetadata();\r\n+\r\n+        // Process ServiceRestMetadata\r\n+        processServiceRestMetadata(serviceRestMetadata, serviceType);\r\n+\r\n+        // Process RestMethodMetadata\r\n+        processAllRestMethodMetadata(serviceRestMetadata, serviceType);\r\n+\r\n+        return serviceRestMetadata;\r\n+    }\r\n+\r\n+    /**\r\n+     * Process the service type including the sub-routines:\r\n+     * <ul>\r\n+     *     <li>{@link ServiceRestMetadata#setServiceInterface(String)}</li>\r\n+     *     <li>{@link ServiceRestMetadata#setVersion(String)}</li>\r\n+     *     <li>{@link ServiceRestMetadata#setGroup(String)}</li>\r\n+     * </ul>\r\n+     *\r\n+     * @param serviceRestMetadata {@link ServiceRestMetadata}\r\n+     * @param serviceType         Dubbo Service interface or type\r\n+     */\r\n+    protected void processServiceRestMetadata(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\r\n+        ServiceAnnotationResolver resolver = new ServiceAnnotationResolver(serviceType);\r\n+        serviceRestMetadata.setServiceInterface(resolver.resolveInterfaceClassName());\r\n+        serviceRestMetadata.setVersion(resolver.resolveVersion());\r\n+        serviceRestMetadata.setGroup(resolver.resolveGroup());\r\n+    }\r\n+\r\n+    /**\r\n+     * Process all {@link RestMethodMetadata}\r\n+     *\r\n+     * @param serviceRestMetadata {@link ServiceRestMetadata}\r\n+     * @param serviceType         Dubbo Service interface or type\r\n+     */\r\n+    protected void processAllRestMethodMetadata(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\r\n+        Class<?> serviceInterfaceClass = resolveServiceInterfaceClass(serviceRestMetadata, serviceType);\r\n+        Map<Method, Method> serviceMethodsMap = resolveServiceMethodsMap(serviceType, serviceInterfaceClass);\r\n+        for (Map.Entry<Method, Method> entry : serviceMethodsMap.entrySet()) {\r\n+            // try the overrider method first\r\n+            Method serviceMethod = entry.getKey();\r\n+            // If failed, it indicates the overrider method does not contain metadata , then try the declared method\r\n+            if (!processRestMethodMetadata(serviceMethod, serviceType, serviceInterfaceClass, serviceRestMetadata.getMeta()::add)) {\r\n+                Method declaredServiceMethod = entry.getValue();\r\n+                processRestMethodMetadata(declaredServiceMethod, serviceType, serviceInterfaceClass,\r\n+                        serviceRestMetadata.getMeta()::add);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve a map of all public services methods from the specified service type and its interface class, whose key is the\r\n+     * declared method, and the value is the overrider method\r\n+     *\r\n+     * @param serviceType           the service interface implementation class\r\n+     * @param serviceInterfaceClass the service interface class\r\n+     * @return non-null read-only {@link Map}\r\n+     */\r\n+    protected Map<Method, Method> resolveServiceMethodsMap(Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        Map<Method, Method> serviceMethodsMap = new LinkedHashMap<>();\r\n+        // exclude the public methods declared in java.lang.Object.class\r\n+        List<Method> declaredServiceMethods = new ArrayList<>(getAllMethods(serviceInterfaceClass, excludedDeclaredClass(Object.class)));\r\n+        List<Method> serviceMethods = new ArrayList<>(getAllMethods(serviceType, excludedDeclaredClass(Object.class)));\r\n+\r\n+        // sort methods\r\n+        sort(declaredServiceMethods, MethodComparator.INSTANCE);\r\n+        sort(serviceMethods, MethodComparator.INSTANCE);\r\n+\r\n+        for (Method declaredServiceMethod : declaredServiceMethods) {\r\n+            for (Method serviceMethod : serviceMethods) {\r\n+                if (overrides(serviceMethod, declaredServiceMethod)) {\r\n+                    serviceMethodsMap.put(serviceMethod, declaredServiceMethod);\r\n+                    continue;\r\n+                }\r\n+            }\r\n+        }\r\n+        // make them to be read-only\r\n+        return unmodifiableMap(serviceMethodsMap);\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve the class of Dubbo Service interface\r\n+     *\r\n+     * @param serviceRestMetadata {@link ServiceRestMetadata}\r\n+     * @param serviceType         Dubbo Service interface or type\r\n+     * @return non-null\r\n+     * @throws RuntimeException If the class is not found, the {@link RuntimeException} wraps the cause will be thrown\r\n+     */\r\n+    protected Class<?> resolveServiceInterfaceClass(ServiceRestMetadata serviceRestMetadata, Class<?> serviceType) {\r\n+        return execute(serviceType.getClassLoader(), classLoader -> {\r\n+            String serviceInterface = serviceRestMetadata.getServiceInterface();\r\n+            return forName(serviceInterface, classLoader);\r\n+        });\r\n+    }\r\n+\r\n+    /**\r\n+     * Process the single {@link RestMethodMetadata} by the specified {@link Consumer} if present\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @param metadataToProcess     {@link RestMethodMetadata} to process if present\r\n+     * @return if processed successfully, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    protected boolean processRestMethodMetadata(Method serviceMethod, Class<?> serviceType,\r\n+                                                Class<?> serviceInterfaceClass,\r\n+                                                Consumer<RestMethodMetadata> metadataToProcess) {\r\n+\r\n+        if (!isRestCapableMethod(serviceMethod, serviceType, serviceInterfaceClass)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        String requestPath = resolveRequestPath(serviceMethod, serviceType, serviceInterfaceClass); // requestPath is required\r\n+\r\n+        if (requestPath == null) {\r\n+            return false;\r\n+        }\r\n+\r\n+        String requestMethod = resolveRequestMethod(serviceMethod, serviceType, serviceInterfaceClass); // requestMethod is required\r\n+\r\n+        if (requestMethod == null) {\r\n+            return false;\r\n+        }\r\n+\r\n+        RestMethodMetadata metadata = new RestMethodMetadata();\r\n+\r\n+        MethodDefinition methodDefinition = resolveMethodDefinition(serviceMethod, serviceType, serviceInterfaceClass);\r\n+        // Set MethodDefinition\r\n+        metadata.setMethod(methodDefinition);\r\n+\r\n+        // process the annotated method parameters\r\n+        processAnnotatedMethodParameters(serviceMethod, serviceType, serviceInterfaceClass, metadata);\r\n+\r\n+        // process produces\r\n+        Set<String> produces = new LinkedHashSet<>();\r\n+        processProduces(serviceMethod, serviceType, serviceInterfaceClass, produces);\r\n+\r\n+        // process consumes\r\n+        Set<String> consumes = new LinkedHashSet<>();\r\n+        processConsumes(serviceMethod, serviceType, serviceInterfaceClass, consumes);\r\n+\r\n+        // Initialize RequestMetadata\r\n+        RequestMetadata request = metadata.getRequest();\r\n+        request.setPath(requestPath);\r\n+        request.setMethod(requestMethod);\r\n+        request.setProduces(produces);\r\n+        request.setConsumes(consumes);\r\n+\r\n+        // Post-Process\r\n+        postResolveRestMethodMetadata(serviceMethod, serviceType, serviceInterfaceClass, metadata);\r\n+\r\n+        // Accept RestMethodMetadata\r\n+        metadataToProcess.accept(metadata);\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Test the service method is capable of REST or not?\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @return If capable, return <code>true</code>\r\n+     */\r\n+    protected abstract boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass);\r\n+\r\n+    /**\r\n+     * Resolve the request method\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @return if can't be resolve, return <code>null</code>\r\n+     */\r\n+    protected abstract String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass);\r\n+\r\n+    /**\r\n+     * Resolve the request path\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @return if can't be resolve, return <code>null</code>\r\n+     */\r\n+    protected abstract String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass);\r\n+\r\n+    /**\r\n+     * Resolve the {@link MethodDefinition}\r\n+     *\r\n+     * @param serviceMethod         Dubbo Service method\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @return if can't be resolve, return <code>null</code>\r\n+     * @see MethodDefinitionBuilder\r\n+     */\r\n+    protected MethodDefinition resolveMethodDefinition(Method serviceMethod, Class<?> serviceType,\r\n+                                                       Class<?> serviceInterfaceClass) {\r\n+        MethodDefinitionBuilder builder = new MethodDefinitionBuilder();\r\n+        return builder.build(serviceMethod);\r\n+    }\r\n+\r\n+    private void processAnnotatedMethodParameters(Method serviceMethod, Class<?> serviceType,\r\n+                                                  Class<?> serviceInterfaceClass, RestMethodMetadata metadata) {\r\n+        int paramCount = serviceMethod.getParameterCount();\r\n+        Parameter[] parameters = serviceMethod.getParameters();\r\n+        for (int i = 0; i < paramCount; i++) {\r\n+            Parameter parameter = parameters[i];\r\n+            // Add indexed parameter name\r\n+            metadata.addIndexToName(i, parameter.getName());\r\n+            processAnnotatedMethodParameter(parameter, i, serviceMethod, serviceType, serviceInterfaceClass, metadata);\r\n+        }\r\n+    }\r\n+\r\n+    private void processAnnotatedMethodParameter(Parameter parameter, int parameterIndex, Method serviceMethod,\r\n+                                                 Class<?> serviceType, Class<?> serviceInterfaceClass,\r\n+                                                 RestMethodMetadata metadata) {\r\n+        Annotation[] annotations = parameter.getAnnotations();\r\n+        for (Annotation annotation : annotations) {\r\n+            String annotationType = annotation.annotationType().getName();\r\n+            parameterProcessorsMap.getOrDefault(annotationType, emptyList())\r\n+                    .forEach(processor -> {\r\n+                        processor.process(annotation, parameter, parameterIndex, serviceMethod, serviceType,\r\n+                                serviceInterfaceClass, metadata);\r\n+                    });\r\n+        }\r\n+    }\r\n+\r\n+    protected abstract void processProduces(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass,\r\n+                                            Set<String> produces);\r\n+\r\n+    protected abstract void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?>\r\n+            serviceInterfaceClass,\r\n+                                            Set<String> consumes);\r\n+\r\n+    protected void postResolveRestMethodMetadata(Method serviceMethod, Class<?> serviceType,\r\n+                                                 Class<?> serviceInterfaceClass, RestMethodMetadata metadata) {\r\n+    }\r\n+\r\n+    private static Map<String, List<AnnotatedMethodParameterProcessor>> loadAnnotatedMethodParameterProcessors() {\r\n+        Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = new LinkedHashMap<>();\r\n+        getExtensionLoader(AnnotatedMethodParameterProcessor.class)\r\n+                .getSupportedExtensionInstances()\r\n+                .forEach(processor -> {\r\n+                    List<AnnotatedMethodParameterProcessor> processors =\r\n+                            parameterProcessorsMap.computeIfAbsent(processor.getAnnotationType(), k -> new LinkedList<>());\r\n+                    processors.add(processor);\r\n+                });\r\n+        return parameterProcessorsMap;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/AnnotatedMethodParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/AnnotatedMethodParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,66 +1,66 @@\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.metadata.rest;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-\n-import javax.lang.model.element.VariableElement;\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Parameter;\n-\n-/**\n- * The interface to process the annotated method parameter\n- *\n- * @since 2.7.6\n- */\n-@SPI\n-public interface AnnotatedMethodParameterProcessor extends Prioritized {\n-\n-    /**\n-     * The string presenting the annotation type\n-     *\n-     * @return non-null\n-     */\n-    String getAnnotationType();\n-\n-    /**\n-     * Process the specified method {@link VariableElement parameter}\n-     *\n-     * @param annotation            {@link Annotation the target annotation} whose type is {@link #getAnnotationType()}\n-     * @param parameter             the method parameter\n-     * @param parameterIndex        the index of method parameter\n-     * @param method                {@link Method method that parameter belongs to}\n-     * @param serviceType           Dubbo Service interface or type\n-     * @param serviceInterfaceClass The type of Dubbo Service interface\n-     * @param restMethodMetadata    {@link RestMethodMetadata the metadata is used to update}\n-     */\n-    void process(Annotation annotation, Parameter parameter, int parameterIndex, Method method,\n-                 Class<?> serviceType, Class<?> serviceInterfaceClass, RestMethodMetadata restMethodMetadata);\n-\n-    /**\n-     * Build the default value\n-     *\n-     * @param parameterIndex the index of parameter\n-     * @return the placeholder\n-     */\n-    static String buildDefaultValue(int parameterIndex) {\n-        return \"{\" + parameterIndex + \"}\";\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.metadata.rest;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+\r\n+import javax.lang.model.element.VariableElement;\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Parameter;\r\n+\r\n+/**\r\n+ * The interface to process the annotated method parameter\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface AnnotatedMethodParameterProcessor extends Prioritized {\r\n+\r\n+    /**\r\n+     * The string presenting the annotation type\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    String getAnnotationType();\r\n+\r\n+    /**\r\n+     * Process the specified method {@link VariableElement parameter}\r\n+     *\r\n+     * @param annotation            {@link Annotation the target annotation} whose type is {@link #getAnnotationType()}\r\n+     * @param parameter             the method parameter\r\n+     * @param parameterIndex        the index of method parameter\r\n+     * @param method                {@link Method method that parameter belongs to}\r\n+     * @param serviceType           Dubbo Service interface or type\r\n+     * @param serviceInterfaceClass The type of Dubbo Service interface\r\n+     * @param restMethodMetadata    {@link RestMethodMetadata the metadata is used to update}\r\n+     */\r\n+    void process(Annotation annotation, Parameter parameter, int parameterIndex, Method method,\r\n+                 Class<?> serviceType, Class<?> serviceInterfaceClass, RestMethodMetadata restMethodMetadata);\r\n+\r\n+    /**\r\n+     * Build the default value\r\n+     *\r\n+     * @param parameterIndex the index of parameter\r\n+     * @return the placeholder\r\n+     */\r\n+    static String buildDefaultValue(int parameterIndex) {\r\n+        return \"{\" + parameterIndex + \"}\";\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/ClassPathServiceRestMetadataReader.java", "source2": "org/apache/dubbo/metadata/rest/ClassPathServiceRestMetadataReader.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,82 +1,82 @@\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.metadata.rest;\n-\n-import com.google.gson.Gson;\n-import com.google.gson.JsonArray;\n-import com.google.gson.JsonElement;\n-import com.google.gson.JsonParser;\n-\n-import java.io.InputStream;\n-import java.io.InputStreamReader;\n-import java.net.URL;\n-import java.util.Enumeration;\n-import java.util.LinkedList;\n-import java.util.List;\n-\n-import static java.util.Collections.unmodifiableList;\n-import static org.apache.dubbo.common.function.ThrowableAction.execute;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.METADATA_ENCODING;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SERVICE_REST_METADATA_RESOURCE_PATH;\n-\n-/**\n- * Class-Path based {@link ServiceRestMetadataReader} implementation\n- *\n- * @see ServiceRestMetadataReader\n- * @since 2.7.6\n- */\n-public class ClassPathServiceRestMetadataReader implements ServiceRestMetadataReader {\n-\n-    private final String serviceRestMetadataJsonResourcePath;\n-\n-    public ClassPathServiceRestMetadataReader() {\n-        this(SERVICE_REST_METADATA_RESOURCE_PATH);\n-    }\n-\n-    public ClassPathServiceRestMetadataReader(String serviceRestMetadataJsonResourcePath) {\n-        this.serviceRestMetadataJsonResourcePath = serviceRestMetadataJsonResourcePath;\n-    }\n-\n-    @Override\n-    public List<ServiceRestMetadata> read() {\n-\n-        List<ServiceRestMetadata> serviceRestMetadataList = new LinkedList<>();\n-\n-        ClassLoader classLoader = getClass().getClassLoader();\n-\n-        execute(() -> {\n-            Enumeration<URL> resources = classLoader.getResources(serviceRestMetadataJsonResourcePath);\n-            Gson gson = new Gson();\n-            while (resources.hasMoreElements()) {\n-                URL resource = resources.nextElement();\n-                InputStream inputStream = resource.openStream();\n-                JsonParser parser = new JsonParser();\n-                JsonElement jsonElement = parser.parse(new InputStreamReader(inputStream, METADATA_ENCODING));\n-                if (jsonElement.isJsonArray()) {\n-                    JsonArray jsonArray = jsonElement.getAsJsonArray();\n-                    for (int i = 0; i < jsonArray.size(); i++) {\n-                        JsonElement childJsonElement = jsonArray.get(i);\n-                        ServiceRestMetadata serviceRestMetadata = gson.fromJson(childJsonElement, ServiceRestMetadata.class);\n-                        serviceRestMetadataList.add(serviceRestMetadata);\n-                    }\n-                }\n-            }\n-        });\n-\n-        return unmodifiableList(serviceRestMetadataList);\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.metadata.rest;\r\n+\r\n+import com.google.gson.Gson;\r\n+import com.google.gson.JsonArray;\r\n+import com.google.gson.JsonElement;\r\n+import com.google.gson.JsonParser;\r\n+\r\n+import java.io.InputStream;\r\n+import java.io.InputStreamReader;\r\n+import java.net.URL;\r\n+import java.util.Enumeration;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+\r\n+import static java.util.Collections.unmodifiableList;\r\n+import static org.apache.dubbo.common.function.ThrowableAction.execute;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.METADATA_ENCODING;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SERVICE_REST_METADATA_RESOURCE_PATH;\r\n+\r\n+/**\r\n+ * Class-Path based {@link ServiceRestMetadataReader} implementation\r\n+ *\r\n+ * @see ServiceRestMetadataReader\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ClassPathServiceRestMetadataReader implements ServiceRestMetadataReader {\r\n+\r\n+    private final String serviceRestMetadataJsonResourcePath;\r\n+\r\n+    public ClassPathServiceRestMetadataReader() {\r\n+        this(SERVICE_REST_METADATA_RESOURCE_PATH);\r\n+    }\r\n+\r\n+    public ClassPathServiceRestMetadataReader(String serviceRestMetadataJsonResourcePath) {\r\n+        this.serviceRestMetadataJsonResourcePath = serviceRestMetadataJsonResourcePath;\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<ServiceRestMetadata> read() {\r\n+\r\n+        List<ServiceRestMetadata> serviceRestMetadataList = new LinkedList<>();\r\n+\r\n+        ClassLoader classLoader = getClass().getClassLoader();\r\n+\r\n+        execute(() -> {\r\n+            Enumeration<URL> resources = classLoader.getResources(serviceRestMetadataJsonResourcePath);\r\n+            Gson gson = new Gson();\r\n+            while (resources.hasMoreElements()) {\r\n+                URL resource = resources.nextElement();\r\n+                InputStream inputStream = resource.openStream();\r\n+                JsonParser parser = new JsonParser();\r\n+                JsonElement jsonElement = parser.parse(new InputStreamReader(inputStream, METADATA_ENCODING));\r\n+                if (jsonElement.isJsonArray()) {\r\n+                    JsonArray jsonArray = jsonElement.getAsJsonArray();\r\n+                    for (int i = 0; i < jsonArray.size(); i++) {\r\n+                        JsonElement childJsonElement = jsonArray.get(i);\r\n+                        ServiceRestMetadata serviceRestMetadata = gson.fromJson(childJsonElement, ServiceRestMetadata.class);\r\n+                        serviceRestMetadataList.add(serviceRestMetadata);\r\n+                    }\r\n+                }\r\n+            }\r\n+        });\r\n+\r\n+        return unmodifiableList(serviceRestMetadataList);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/DefaultServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/DefaultServiceRestMetadataResolver.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-package org.apache.dubbo.metadata.rest;\n-\n-import java.lang.reflect.Method;\n-import java.util.Set;\n-\n-\n-/**\n- * The default implementation {@link ServiceRestMetadataResolver}\n- *\n- * @since 2.7.6\n- */\n-public class DefaultServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    @Override\n-    protected boolean supports0(Class<?> serviceType) {\n-        return false;\n-    }\n-\n-    @Override\n-    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return false;\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return null;\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return null;\n-    }\n-\n-    @Override\n-    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> produces) {\n-\n-    }\n-\n-    @Override\n-    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> consumes) {\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.metadata.rest;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.Set;\r\n+\r\n+\r\n+/**\r\n+ * The default implementation {@link ServiceRestMetadataResolver}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class DefaultServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    @Override\r\n+    protected boolean supports0(Class<?> serviceType) {\r\n+        return false;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return false;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> produces) {\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> consumes) {\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/RequestMetadata.java", "source2": "org/apache/dubbo/metadata/rest/RequestMetadata.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,226 +1,226 @@\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.metadata.rest;\n-\n-\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-\n-import java.io.Serializable;\n-import java.util.Collection;\n-import java.util.LinkedHashMap;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-import java.util.Set;\n-\n-import static java.util.Collections.unmodifiableMap;\n-import static org.apache.dubbo.common.utils.PathUtils.normalize;\n-import static org.apache.dubbo.common.utils.StringUtils.isBlank;\n-\n-/**\n- * The metadata class for REST request\n- *\n- * @since 2.7.6\n- */\n-public class RequestMetadata implements Serializable {\n-\n-    private static final long serialVersionUID = -240099840085329958L;\n-\n-    private String method;\n-\n-    private String path;\n-\n-    private Map<String, List<String>> params = new LinkedHashMap<>();\n-\n-    private Map<String, List<String>> headers = new LinkedHashMap<>();\n-\n-    private Set<String> consumes = new LinkedHashSet<>();\n-\n-    private Set<String> produces = new LinkedHashSet<>();\n-\n-    /**\n-     * Default Constructor\n-     */\n-    public RequestMetadata() {\n-    }\n-\n-    public String getMethod() {\n-        return method;\n-    }\n-\n-    public void setMethod(String method) {\n-        this.method = method == null ? null : method.toUpperCase();\n-    }\n-\n-    public String getPath() {\n-        return path;\n-    }\n-\n-    public void setPath(String path) {\n-        this.path = normalize(path);\n-    }\n-\n-    public Map<String, List<String>> getParams() {\n-        return unmodifiableMap(params);\n-    }\n-\n-    public void setParams(Map<String, List<String>> params) {\n-        params(params);\n-    }\n-\n-    private static void add(Map<String, List<String>> multiValueMap, String key, String value) {\n-        if (isBlank(key)) {\n-            return;\n-        }\n-        List<String> values = get(multiValueMap, key, true);\n-        values.add(value);\n-    }\n-\n-    private static <T extends Collection<String>> void addAll(Map<String, List<String>> multiValueMap,\n-                                                              Map<String, T> source) {\n-        for (Map.Entry<String, T> entry : source.entrySet()) {\n-            String key = entry.getKey();\n-            for (String value : entry.getValue()) {\n-                add(multiValueMap, key, value);\n-            }\n-        }\n-    }\n-\n-    private static String getFirst(Map<String, List<String>> multiValueMap, String key) {\n-        List<String> values = get(multiValueMap, key);\n-        return CollectionUtils.isNotEmpty(values) ? values.get(0) : null;\n-    }\n-\n-    private static List<String> get(Map<String, List<String>> multiValueMap, String key) {\n-        return get(multiValueMap, key, false);\n-    }\n-\n-    private static List<String> get(Map<String, List<String>> multiValueMap, String key, boolean createIfAbsent) {\n-        return createIfAbsent ? multiValueMap.computeIfAbsent(key, k -> new LinkedList<>()) : multiValueMap.get(key);\n-    }\n-\n-    public Map<String, List<String>> getHeaders() {\n-        return unmodifiableMap(headers);\n-    }\n-\n-    public void setHeaders(Map<String, List<String>> headers) {\n-        headers(headers);\n-    }\n-\n-    public Set<String> getConsumes() {\n-        return consumes;\n-    }\n-\n-    public void setConsumes(Set<String> consumes) {\n-        this.consumes = consumes;\n-    }\n-\n-    public Set<String> getProduces() {\n-        return produces;\n-    }\n-\n-    public void setProduces(Set<String> produces) {\n-        this.produces = produces;\n-    }\n-\n-    public Set<String> getParamNames() {\n-        return params.keySet();\n-    }\n-\n-    public Set<String> getHeaderNames() {\n-        return headers.keySet();\n-    }\n-\n-//    public List<MediaType> getConsumeMediaTypes() {\n-//        return toMediaTypes(consumes);\n-//    }\n-//\n-//    public List<MediaType> getProduceMediaTypes() {\n-//        return toMediaTypes(produces);\n-//    }\n-\n-    public String getParameter(String name) {\n-        return getFirst(params, name);\n-    }\n-\n-    public String getHeader(String name) {\n-        return getFirst(headers, name);\n-    }\n-\n-    public RequestMetadata addParam(String name, String value) {\n-        add(params, name, value);\n-        return this;\n-    }\n-\n-    public RequestMetadata addHeader(String name, String value) {\n-        add(headers, name, value);\n-        return this;\n-    }\n-\n-    private <T extends Collection<String>> RequestMetadata params(Map<String, T> params) {\n-        addAll(this.params, params);\n-        return this;\n-    }\n-\n-    private <T extends Collection<String>> RequestMetadata headers(Map<String, List<String>> headers) {\n-        if (headers != null && !headers.isEmpty()) {\n-            Map<String, List<String>> httpHeaders = new LinkedHashMap<>();\n-            // Add all headers\n-            addAll(headers, httpHeaders);\n-            // Handles \"Content-Type\" and \"Accept\" headers if present\n-//            mediaTypes(httpHeaders, HttpHeaders.CONTENT_TYPE, this.consumes);\n-//            mediaTypes(httpHeaders, HttpHeaders.ACCEPT, this.produces);\n-            this.headers.putAll(httpHeaders);\n-        }\n-        return this;\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof RequestMetadata)) {\n-            return false;\n-        }\n-        RequestMetadata that = (RequestMetadata) o;\n-        return Objects.equals(method, that.method)\n-                && Objects.equals(path, that.path)\n-                && Objects.equals(consumes, that.consumes)\n-                && Objects.equals(produces, that.produces) &&\n-                // Metadata should not compare the values\n-                Objects.equals(getParamNames(), that.getParamNames())\n-                && Objects.equals(getHeaderNames(), that.getHeaderNames());\n-\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        // The values of metadata should not use for the hashCode() method\n-        return Objects.hash(method, path, consumes, produces, getParamNames(),\n-                getHeaderNames());\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"RequestMetadata{\" + \"method='\" + method + '\\'' + \", path='\" + path + '\\''\n-                + \", params=\" + params + \", headers=\" + headers + \", consumes=\" + consumes\n-                + \", produces=\" + produces + '}';\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.metadata.rest;\r\n+\r\n+\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.Collection;\r\n+import java.util.LinkedHashMap;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+\r\n+import static java.util.Collections.unmodifiableMap;\r\n+import static org.apache.dubbo.common.utils.PathUtils.normalize;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isBlank;\r\n+\r\n+/**\r\n+ * The metadata class for REST request\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class RequestMetadata implements Serializable {\r\n+\r\n+    private static final long serialVersionUID = -240099840085329958L;\r\n+\r\n+    private String method;\r\n+\r\n+    private String path;\r\n+\r\n+    private Map<String, List<String>> params = new LinkedHashMap<>();\r\n+\r\n+    private Map<String, List<String>> headers = new LinkedHashMap<>();\r\n+\r\n+    private Set<String> consumes = new LinkedHashSet<>();\r\n+\r\n+    private Set<String> produces = new LinkedHashSet<>();\r\n+\r\n+    /**\r\n+     * Default Constructor\r\n+     */\r\n+    public RequestMetadata() {\r\n+    }\r\n+\r\n+    public String getMethod() {\r\n+        return method;\r\n+    }\r\n+\r\n+    public void setMethod(String method) {\r\n+        this.method = method == null ? null : method.toUpperCase();\r\n+    }\r\n+\r\n+    public String getPath() {\r\n+        return path;\r\n+    }\r\n+\r\n+    public void setPath(String path) {\r\n+        this.path = normalize(path);\r\n+    }\r\n+\r\n+    public Map<String, List<String>> getParams() {\r\n+        return unmodifiableMap(params);\r\n+    }\r\n+\r\n+    public void setParams(Map<String, List<String>> params) {\r\n+        params(params);\r\n+    }\r\n+\r\n+    private static void add(Map<String, List<String>> multiValueMap, String key, String value) {\r\n+        if (isBlank(key)) {\r\n+            return;\r\n+        }\r\n+        List<String> values = get(multiValueMap, key, true);\r\n+        values.add(value);\r\n+    }\r\n+\r\n+    private static <T extends Collection<String>> void addAll(Map<String, List<String>> multiValueMap,\r\n+                                                              Map<String, T> source) {\r\n+        for (Map.Entry<String, T> entry : source.entrySet()) {\r\n+            String key = entry.getKey();\r\n+            for (String value : entry.getValue()) {\r\n+                add(multiValueMap, key, value);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private static String getFirst(Map<String, List<String>> multiValueMap, String key) {\r\n+        List<String> values = get(multiValueMap, key);\r\n+        return CollectionUtils.isNotEmpty(values) ? values.get(0) : null;\r\n+    }\r\n+\r\n+    private static List<String> get(Map<String, List<String>> multiValueMap, String key) {\r\n+        return get(multiValueMap, key, false);\r\n+    }\r\n+\r\n+    private static List<String> get(Map<String, List<String>> multiValueMap, String key, boolean createIfAbsent) {\r\n+        return createIfAbsent ? multiValueMap.computeIfAbsent(key, k -> new LinkedList<>()) : multiValueMap.get(key);\r\n+    }\r\n+\r\n+    public Map<String, List<String>> getHeaders() {\r\n+        return unmodifiableMap(headers);\r\n+    }\r\n+\r\n+    public void setHeaders(Map<String, List<String>> headers) {\r\n+        headers(headers);\r\n+    }\r\n+\r\n+    public Set<String> getConsumes() {\r\n+        return consumes;\r\n+    }\r\n+\r\n+    public void setConsumes(Set<String> consumes) {\r\n+        this.consumes = consumes;\r\n+    }\r\n+\r\n+    public Set<String> getProduces() {\r\n+        return produces;\r\n+    }\r\n+\r\n+    public void setProduces(Set<String> produces) {\r\n+        this.produces = produces;\r\n+    }\r\n+\r\n+    public Set<String> getParamNames() {\r\n+        return params.keySet();\r\n+    }\r\n+\r\n+    public Set<String> getHeaderNames() {\r\n+        return headers.keySet();\r\n+    }\r\n+\r\n+//    public List<MediaType> getConsumeMediaTypes() {\r\n+//        return toMediaTypes(consumes);\r\n+//    }\r\n+//\r\n+//    public List<MediaType> getProduceMediaTypes() {\r\n+//        return toMediaTypes(produces);\r\n+//    }\r\n+\r\n+    public String getParameter(String name) {\r\n+        return getFirst(params, name);\r\n+    }\r\n+\r\n+    public String getHeader(String name) {\r\n+        return getFirst(headers, name);\r\n+    }\r\n+\r\n+    public RequestMetadata addParam(String name, String value) {\r\n+        add(params, name, value);\r\n+        return this;\r\n+    }\r\n+\r\n+    public RequestMetadata addHeader(String name, String value) {\r\n+        add(headers, name, value);\r\n+        return this;\r\n+    }\r\n+\r\n+    private <T extends Collection<String>> RequestMetadata params(Map<String, T> params) {\r\n+        addAll(this.params, params);\r\n+        return this;\r\n+    }\r\n+\r\n+    private <T extends Collection<String>> RequestMetadata headers(Map<String, List<String>> headers) {\r\n+        if (headers != null && !headers.isEmpty()) {\r\n+            Map<String, List<String>> httpHeaders = new LinkedHashMap<>();\r\n+            // Add all headers\r\n+            addAll(headers, httpHeaders);\r\n+            // Handles \"Content-Type\" and \"Accept\" headers if present\r\n+//            mediaTypes(httpHeaders, HttpHeaders.CONTENT_TYPE, this.consumes);\r\n+//            mediaTypes(httpHeaders, HttpHeaders.ACCEPT, this.produces);\r\n+            this.headers.putAll(httpHeaders);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof RequestMetadata)) {\r\n+            return false;\r\n+        }\r\n+        RequestMetadata that = (RequestMetadata) o;\r\n+        return Objects.equals(method, that.method)\r\n+                && Objects.equals(path, that.path)\r\n+                && Objects.equals(consumes, that.consumes)\r\n+                && Objects.equals(produces, that.produces) &&\r\n+                // Metadata should not compare the values\r\n+                Objects.equals(getParamNames(), that.getParamNames())\r\n+                && Objects.equals(getHeaderNames(), that.getHeaderNames());\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        // The values of metadata should not use for the hashCode() method\r\n+        return Objects.hash(method, path, consumes, produces, getParamNames(),\r\n+                getHeaderNames());\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"RequestMetadata{\" + \"method='\" + method + '\\'' + \", path='\" + path + '\\''\r\n+                + \", params=\" + params + \", headers=\" + headers + \", consumes=\" + consumes\r\n+                + \", produces=\" + produces + '}';\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/RestMetadataConstants.java", "source2": "org/apache/dubbo/metadata/rest/RestMetadataConstants.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,145 +1,145 @@\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.metadata.rest;\n-\n-import java.lang.annotation.Annotation;\n-\n-import static org.apache.dubbo.common.utils.ClassUtils.getClassLoader;\n-import static org.apache.dubbo.common.utils.ClassUtils.resolveClass;\n-\n-/**\n- * The REST Metadata Constants definition interface\n- *\n- * @since 2.7.6\n- */\n-public interface RestMetadataConstants {\n-\n-    /**\n-     * The encoding of metadata\n-     */\n-    String METADATA_ENCODING = \"UTF-8\";\n-\n-    /**\n-     * {@link ServiceRestMetadata} Resource PATH\n-     */\n-    String SERVICE_REST_METADATA_RESOURCE_PATH = \"META-INF/dubbo/service-rest-metadata.json\";\n-\n-    /**\n-     * JAX-RS\n-     */\n-    interface JAX_RS {\n-\n-        /**\n-         * The annotation class name of @Path\n-         */\n-        String PATH_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Path\";\n-\n-        /**\n-         * The annotation class name of @HttpMethod\n-         */\n-        String HTTP_METHOD_ANNOTATION_CLASS_NAME = \"javax.ws.rs.HttpMethod\";\n-\n-        /**\n-         * The annotation class name of @Produces\n-         */\n-        String PRODUCES_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Produces\";\n-\n-        /**\n-         * The annotation class name of @Consumes\n-         */\n-        String CONSUMES_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Consumes\";\n-\n-        /**\n-         * The annotation class name of @DefaultValue\n-         */\n-        String DEFAULT_VALUE_ANNOTATION_CLASS_NAME = \"javax.ws.rs.DefaultValue\";\n-\n-        /**\n-         * The annotation class name of @FormParam\n-         */\n-        String FORM_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.FormParam\";\n-\n-        /**\n-         * The annotation class name of @HeaderParam\n-         */\n-        String HEADER_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.HeaderParam\";\n-\n-        /**\n-         * The annotation class name of @MatrixParam\n-         */\n-        String MATRIX_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.MatrixParam\";\n-\n-        /**\n-         * The annotation class name of @QueryParam\n-         */\n-        String QUERY_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.QueryParam\";\n-    }\n-\n-    /**\n-     * Spring MVC\n-     */\n-    interface SPRING_MVC {\n-\n-        /**\n-         * The annotation class name of @Controller\n-         */\n-        String CONTROLLER_ANNOTATION_CLASS_NAME = \"org.springframework.stereotype.Controller\";\n-\n-        /**\n-         * The annotation class name of @RequestMapping\n-         */\n-        String REQUEST_MAPPING_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestMapping\";\n-\n-        /**\n-         * The annotation class name of @RequestHeader\n-         */\n-        String REQUEST_HEADER_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestHeader\";\n-\n-        /**\n-         * The annotation class name of @RequestParam\n-         */\n-        String REQUEST_PARAM_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestParam\";\n-\n-        /**\n-         * The class of @Controller\n-         *\n-         * @since 2.7.9\n-         */\n-        Class<? extends Annotation> CONTROLLER_ANNOTATION_CLASS = (Class<? extends Annotation>) resolveClass(CONTROLLER_ANNOTATION_CLASS_NAME, getClassLoader());\n-\n-        /**\n-         * The class of @RequestMapping\n-         *\n-         * @since 2.7.9\n-         */\n-        Class<? extends Annotation> REQUEST_MAPPING_ANNOTATION_CLASS = (Class<? extends Annotation>) resolveClass(REQUEST_MAPPING_ANNOTATION_CLASS_NAME, getClassLoader());\n-\n-        /**\n-         * The annotation class name of AnnotatedElementUtils\n-         *\n-         * @since 2.7.9\n-         */\n-        String ANNOTATED_ELEMENT_UTILS_CLASS_NAME = \"org.springframework.core.annotation.AnnotatedElementUtils\";\n-\n-        /**\n-         * The class of AnnotatedElementUtils\n-         *\n-         * @since 2.7.9\n-         */\n-        Class<?> ANNOTATED_ELEMENT_UTILS_CLASS = resolveClass(ANNOTATED_ELEMENT_UTILS_CLASS_NAME, getClassLoader());\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.metadata.rest;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getClassLoader;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.resolveClass;\r\n+\r\n+/**\r\n+ * The REST Metadata Constants definition interface\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface RestMetadataConstants {\r\n+\r\n+    /**\r\n+     * The encoding of metadata\r\n+     */\r\n+    String METADATA_ENCODING = \"UTF-8\";\r\n+\r\n+    /**\r\n+     * {@link ServiceRestMetadata} Resource PATH\r\n+     */\r\n+    String SERVICE_REST_METADATA_RESOURCE_PATH = \"META-INF/dubbo/service-rest-metadata.json\";\r\n+\r\n+    /**\r\n+     * JAX-RS\r\n+     */\r\n+    interface JAX_RS {\r\n+\r\n+        /**\r\n+         * The annotation class name of @Path\r\n+         */\r\n+        String PATH_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Path\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @HttpMethod\r\n+         */\r\n+        String HTTP_METHOD_ANNOTATION_CLASS_NAME = \"javax.ws.rs.HttpMethod\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @Produces\r\n+         */\r\n+        String PRODUCES_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Produces\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @Consumes\r\n+         */\r\n+        String CONSUMES_ANNOTATION_CLASS_NAME = \"javax.ws.rs.Consumes\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @DefaultValue\r\n+         */\r\n+        String DEFAULT_VALUE_ANNOTATION_CLASS_NAME = \"javax.ws.rs.DefaultValue\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @FormParam\r\n+         */\r\n+        String FORM_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.FormParam\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @HeaderParam\r\n+         */\r\n+        String HEADER_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.HeaderParam\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @MatrixParam\r\n+         */\r\n+        String MATRIX_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.MatrixParam\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @QueryParam\r\n+         */\r\n+        String QUERY_PARAM_ANNOTATION_CLASS_NAME = \"javax.ws.rs.QueryParam\";\r\n+    }\r\n+\r\n+    /**\r\n+     * Spring MVC\r\n+     */\r\n+    interface SPRING_MVC {\r\n+\r\n+        /**\r\n+         * The annotation class name of @Controller\r\n+         */\r\n+        String CONTROLLER_ANNOTATION_CLASS_NAME = \"org.springframework.stereotype.Controller\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @RequestMapping\r\n+         */\r\n+        String REQUEST_MAPPING_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestMapping\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @RequestHeader\r\n+         */\r\n+        String REQUEST_HEADER_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestHeader\";\r\n+\r\n+        /**\r\n+         * The annotation class name of @RequestParam\r\n+         */\r\n+        String REQUEST_PARAM_ANNOTATION_CLASS_NAME = \"org.springframework.web.bind.annotation.RequestParam\";\r\n+\r\n+        /**\r\n+         * The class of @Controller\r\n+         *\r\n+         * @since 2.7.9\r\n+         */\r\n+        Class<? extends Annotation> CONTROLLER_ANNOTATION_CLASS = (Class<? extends Annotation>) resolveClass(CONTROLLER_ANNOTATION_CLASS_NAME, getClassLoader());\r\n+\r\n+        /**\r\n+         * The class of @RequestMapping\r\n+         *\r\n+         * @since 2.7.9\r\n+         */\r\n+        Class<? extends Annotation> REQUEST_MAPPING_ANNOTATION_CLASS = (Class<? extends Annotation>) resolveClass(REQUEST_MAPPING_ANNOTATION_CLASS_NAME, getClassLoader());\r\n+\r\n+        /**\r\n+         * The annotation class name of AnnotatedElementUtils\r\n+         *\r\n+         * @since 2.7.9\r\n+         */\r\n+        String ANNOTATED_ELEMENT_UTILS_CLASS_NAME = \"org.springframework.core.annotation.AnnotatedElementUtils\";\r\n+\r\n+        /**\r\n+         * The class of AnnotatedElementUtils\r\n+         *\r\n+         * @since 2.7.9\r\n+         */\r\n+        Class<?> ANNOTATED_ELEMENT_UTILS_CLASS = resolveClass(ANNOTATED_ELEMENT_UTILS_CLASS_NAME, getClassLoader());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/RestMethodMetadata.java", "source2": "org/apache/dubbo/metadata/rest/RestMethodMetadata.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,199 +1,199 @@\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.metadata.rest;\n-\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-\n-import java.io.Serializable;\n-import java.util.ArrayList;\n-import java.util.Collection;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-\n-import static java.util.Collections.emptyList;\n-\n-/**\n- * The metadata class for {@link RequestMetadata HTTP(REST) request} and\n- * its binding {@link MethodDefinition method definition}\n- *\n- * @since 2.7.6\n- */\n-public class RestMethodMetadata implements Serializable {\n-\n-    private static final long serialVersionUID = 2935252016200830694L;\n-\n-    private MethodDefinition method;\n-\n-    private RequestMetadata request;\n-\n-    private Integer urlIndex;\n-\n-    private Integer bodyIndex;\n-\n-    private Integer headerMapIndex;\n-\n-    private String bodyType;\n-\n-    private Map<Integer, Collection<String>> indexToName;\n-\n-    private List<String> formParams;\n-\n-    private Map<Integer, Boolean> indexToEncoded;\n-\n-    public MethodDefinition getMethod() {\n-        if (method == null) {\n-            method = new MethodDefinition();\n-        }\n-        return method;\n-    }\n-\n-    public void setMethod(MethodDefinition method) {\n-        this.method = method;\n-    }\n-\n-    public RequestMetadata getRequest() {\n-        if (request == null) {\n-            request = new RequestMetadata();\n-        }\n-        return request;\n-    }\n-\n-    public void setRequest(RequestMetadata request) {\n-        this.request = request;\n-    }\n-\n-    public Integer getUrlIndex() {\n-        return urlIndex;\n-    }\n-\n-    public void setUrlIndex(Integer urlIndex) {\n-        this.urlIndex = urlIndex;\n-    }\n-\n-    public Integer getBodyIndex() {\n-        return bodyIndex;\n-    }\n-\n-    public void setBodyIndex(Integer bodyIndex) {\n-        this.bodyIndex = bodyIndex;\n-    }\n-\n-    public Integer getHeaderMapIndex() {\n-        return headerMapIndex;\n-    }\n-\n-    public void setHeaderMapIndex(Integer headerMapIndex) {\n-        this.headerMapIndex = headerMapIndex;\n-    }\n-\n-    public String getBodyType() {\n-        return bodyType;\n-    }\n-\n-    public void setBodyType(String bodyType) {\n-        this.bodyType = bodyType;\n-    }\n-\n-    public Map<Integer, Collection<String>> getIndexToName() {\n-        if (indexToName == null) {\n-            indexToName = new HashMap<>();\n-        }\n-        return indexToName;\n-    }\n-\n-    public void setIndexToName(Map<Integer, Collection<String>> indexToName) {\n-        this.indexToName = indexToName;\n-    }\n-\n-    public void addIndexToName(Integer index, String name) {\n-        if (index == null) {\n-            return;\n-        }\n-\n-        if (name.startsWith(\"arg\") && name.endsWith(index.toString())) {\n-            // Ignore this value because of the Java byte-code without the metadata of method parameters\n-            return;\n-        }\n-\n-        Map<Integer, Collection<String>> indexToName = getIndexToName();\n-        Collection<String> parameterNames = indexToName.computeIfAbsent(index, i -> new ArrayList<>(1));\n-        parameterNames.add(name);\n-    }\n-\n-    public boolean hasIndexedName(Integer index, String name) {\n-        Map<Integer, Collection<String>> indexToName = getIndexToName();\n-        return indexToName.getOrDefault(index, emptyList()).contains(name);\n-    }\n-\n-    public List<String> getFormParams() {\n-        return formParams;\n-    }\n-\n-    public void setFormParams(List<String> formParams) {\n-        this.formParams = formParams;\n-    }\n-\n-    public Map<Integer, Boolean> getIndexToEncoded() {\n-        return indexToEncoded;\n-    }\n-\n-    public void setIndexToEncoded(Map<Integer, Boolean> indexToEncoded) {\n-        this.indexToEncoded = indexToEncoded;\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof RestMethodMetadata)) {\n-            return false;\n-        }\n-        RestMethodMetadata that = (RestMethodMetadata) o;\n-        return Objects.equals(getMethod(), that.getMethod()) &&\n-                Objects.equals(getRequest(), that.getRequest()) &&\n-                Objects.equals(getUrlIndex(), that.getUrlIndex()) &&\n-                Objects.equals(getBodyIndex(), that.getBodyIndex()) &&\n-                Objects.equals(getHeaderMapIndex(), that.getHeaderMapIndex()) &&\n-                Objects.equals(getBodyType(), that.getBodyType()) &&\n-                Objects.equals(getFormParams(), that.getFormParams()) &&\n-                Objects.equals(getIndexToEncoded(), that.getIndexToEncoded());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getMethod(), getRequest(), getUrlIndex(), getBodyIndex(), getHeaderMapIndex(), getBodyType(), getFormParams(), getIndexToEncoded());\n-    }\n-\n-    @Override\n-    public String toString() {\n-        final StringBuilder sb = new StringBuilder(\"RestMethodMetadata{\");\n-        sb.append(\"method=\").append(method);\n-        sb.append(\", request=\").append(request);\n-        sb.append(\", urlIndex=\").append(urlIndex);\n-        sb.append(\", bodyIndex=\").append(bodyIndex);\n-        sb.append(\", headerMapIndex=\").append(headerMapIndex);\n-        sb.append(\", bodyType='\").append(bodyType).append('\\'');\n-        sb.append(\", indexToName=\").append(indexToName);\n-        sb.append(\", formParams=\").append(formParams);\n-        sb.append(\", indexToEncoded=\").append(indexToEncoded);\n-        sb.append('}');\n-        return sb.toString();\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.metadata.rest;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.ArrayList;\r\n+import java.util.Collection;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+\r\n+/**\r\n+ * The metadata class for {@link RequestMetadata HTTP(REST) request} and\r\n+ * its binding {@link MethodDefinition method definition}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class RestMethodMetadata implements Serializable {\r\n+\r\n+    private static final long serialVersionUID = 2935252016200830694L;\r\n+\r\n+    private MethodDefinition method;\r\n+\r\n+    private RequestMetadata request;\r\n+\r\n+    private Integer urlIndex;\r\n+\r\n+    private Integer bodyIndex;\r\n+\r\n+    private Integer headerMapIndex;\r\n+\r\n+    private String bodyType;\r\n+\r\n+    private Map<Integer, Collection<String>> indexToName;\r\n+\r\n+    private List<String> formParams;\r\n+\r\n+    private Map<Integer, Boolean> indexToEncoded;\r\n+\r\n+    public MethodDefinition getMethod() {\r\n+        if (method == null) {\r\n+            method = new MethodDefinition();\r\n+        }\r\n+        return method;\r\n+    }\r\n+\r\n+    public void setMethod(MethodDefinition method) {\r\n+        this.method = method;\r\n+    }\r\n+\r\n+    public RequestMetadata getRequest() {\r\n+        if (request == null) {\r\n+            request = new RequestMetadata();\r\n+        }\r\n+        return request;\r\n+    }\r\n+\r\n+    public void setRequest(RequestMetadata request) {\r\n+        this.request = request;\r\n+    }\r\n+\r\n+    public Integer getUrlIndex() {\r\n+        return urlIndex;\r\n+    }\r\n+\r\n+    public void setUrlIndex(Integer urlIndex) {\r\n+        this.urlIndex = urlIndex;\r\n+    }\r\n+\r\n+    public Integer getBodyIndex() {\r\n+        return bodyIndex;\r\n+    }\r\n+\r\n+    public void setBodyIndex(Integer bodyIndex) {\r\n+        this.bodyIndex = bodyIndex;\r\n+    }\r\n+\r\n+    public Integer getHeaderMapIndex() {\r\n+        return headerMapIndex;\r\n+    }\r\n+\r\n+    public void setHeaderMapIndex(Integer headerMapIndex) {\r\n+        this.headerMapIndex = headerMapIndex;\r\n+    }\r\n+\r\n+    public String getBodyType() {\r\n+        return bodyType;\r\n+    }\r\n+\r\n+    public void setBodyType(String bodyType) {\r\n+        this.bodyType = bodyType;\r\n+    }\r\n+\r\n+    public Map<Integer, Collection<String>> getIndexToName() {\r\n+        if (indexToName == null) {\r\n+            indexToName = new HashMap<>();\r\n+        }\r\n+        return indexToName;\r\n+    }\r\n+\r\n+    public void setIndexToName(Map<Integer, Collection<String>> indexToName) {\r\n+        this.indexToName = indexToName;\r\n+    }\r\n+\r\n+    public void addIndexToName(Integer index, String name) {\r\n+        if (index == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        if (name.startsWith(\"arg\") && name.endsWith(index.toString())) {\r\n+            // Ignore this value because of the Java byte-code without the metadata of method parameters\r\n+            return;\r\n+        }\r\n+\r\n+        Map<Integer, Collection<String>> indexToName = getIndexToName();\r\n+        Collection<String> parameterNames = indexToName.computeIfAbsent(index, i -> new ArrayList<>(1));\r\n+        parameterNames.add(name);\r\n+    }\r\n+\r\n+    public boolean hasIndexedName(Integer index, String name) {\r\n+        Map<Integer, Collection<String>> indexToName = getIndexToName();\r\n+        return indexToName.getOrDefault(index, emptyList()).contains(name);\r\n+    }\r\n+\r\n+    public List<String> getFormParams() {\r\n+        return formParams;\r\n+    }\r\n+\r\n+    public void setFormParams(List<String> formParams) {\r\n+        this.formParams = formParams;\r\n+    }\r\n+\r\n+    public Map<Integer, Boolean> getIndexToEncoded() {\r\n+        return indexToEncoded;\r\n+    }\r\n+\r\n+    public void setIndexToEncoded(Map<Integer, Boolean> indexToEncoded) {\r\n+        this.indexToEncoded = indexToEncoded;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof RestMethodMetadata)) {\r\n+            return false;\r\n+        }\r\n+        RestMethodMetadata that = (RestMethodMetadata) o;\r\n+        return Objects.equals(getMethod(), that.getMethod()) &&\r\n+                Objects.equals(getRequest(), that.getRequest()) &&\r\n+                Objects.equals(getUrlIndex(), that.getUrlIndex()) &&\r\n+                Objects.equals(getBodyIndex(), that.getBodyIndex()) &&\r\n+                Objects.equals(getHeaderMapIndex(), that.getHeaderMapIndex()) &&\r\n+                Objects.equals(getBodyType(), that.getBodyType()) &&\r\n+                Objects.equals(getFormParams(), that.getFormParams()) &&\r\n+                Objects.equals(getIndexToEncoded(), that.getIndexToEncoded());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getMethod(), getRequest(), getUrlIndex(), getBodyIndex(), getHeaderMapIndex(), getBodyType(), getFormParams(), getIndexToEncoded());\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        final StringBuilder sb = new StringBuilder(\"RestMethodMetadata{\");\r\n+        sb.append(\"method=\").append(method);\r\n+        sb.append(\", request=\").append(request);\r\n+        sb.append(\", urlIndex=\").append(urlIndex);\r\n+        sb.append(\", bodyIndex=\").append(bodyIndex);\r\n+        sb.append(\", headerMapIndex=\").append(headerMapIndex);\r\n+        sb.append(\", bodyType='\").append(bodyType).append('\\'');\r\n+        sb.append(\", indexToName=\").append(indexToName);\r\n+        sb.append(\", formParams=\").append(formParams);\r\n+        sb.append(\", indexToEncoded=\").append(indexToEncoded);\r\n+        sb.append('}');\r\n+        return sb.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/ServiceRestMetadata.java", "source2": "org/apache/dubbo/metadata/rest/ServiceRestMetadata.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,107 +1,107 @@\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.metadata.rest;\n-\n-import java.io.Serializable;\n-import java.util.LinkedHashSet;\n-import java.util.Objects;\n-import java.util.Set;\n-\n-/**\n- * The metadata class for {@link RequestMetadata HTTP(REST) request} and\n- * its binding Dubbo service metadata\n- *\n- * @since 2.7.6\n- */\n-public class ServiceRestMetadata implements Serializable {\n-\n-    private static final long serialVersionUID = -4549723140727443569L;\n-\n-    private String serviceInterface;\n-\n-    private String version;\n-\n-    private String group;\n-\n-    private Set<RestMethodMetadata> meta;\n-\n-    public String getServiceInterface() {\n-        return serviceInterface;\n-    }\n-\n-    public void setServiceInterface(String serviceInterface) {\n-        this.serviceInterface = serviceInterface;\n-    }\n-\n-    public String getVersion() {\n-        return version;\n-    }\n-\n-    public void setVersion(String version) {\n-        this.version = version;\n-    }\n-\n-    public String getGroup() {\n-        return group;\n-    }\n-\n-    public void setGroup(String group) {\n-        this.group = group;\n-    }\n-\n-    public Set<RestMethodMetadata> getMeta() {\n-        if (meta == null) {\n-            meta = new LinkedHashSet<>();\n-        }\n-        return meta;\n-    }\n-\n-    public void setMeta(Set<RestMethodMetadata> meta) {\n-        this.meta = meta;\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof ServiceRestMetadata)) {\n-            return false;\n-        }\n-        ServiceRestMetadata that = (ServiceRestMetadata) o;\n-        return Objects.equals(getServiceInterface(), that.getServiceInterface()) &&\n-                Objects.equals(getVersion(), that.getVersion()) &&\n-                Objects.equals(getGroup(), that.getGroup()) &&\n-                Objects.equals(getMeta(), that.getMeta());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getServiceInterface(), getVersion(), getGroup(), getMeta());\n-    }\n-\n-    @Override\n-    public String toString() {\n-        final StringBuilder sb = new StringBuilder(\"ServiceRestMetadata{\");\n-        sb.append(\"serviceInterface='\").append(serviceInterface).append('\\'');\n-        sb.append(\", version='\").append(version).append('\\'');\n-        sb.append(\", group='\").append(group).append('\\'');\n-        sb.append(\", meta=\").append(meta);\n-        sb.append('}');\n-        return sb.toString();\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.metadata.rest;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * The metadata class for {@link RequestMetadata HTTP(REST) request} and\r\n+ * its binding Dubbo service metadata\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ServiceRestMetadata implements Serializable {\r\n+\r\n+    private static final long serialVersionUID = -4549723140727443569L;\r\n+\r\n+    private String serviceInterface;\r\n+\r\n+    private String version;\r\n+\r\n+    private String group;\r\n+\r\n+    private Set<RestMethodMetadata> meta;\r\n+\r\n+    public String getServiceInterface() {\r\n+        return serviceInterface;\r\n+    }\r\n+\r\n+    public void setServiceInterface(String serviceInterface) {\r\n+        this.serviceInterface = serviceInterface;\r\n+    }\r\n+\r\n+    public String getVersion() {\r\n+        return version;\r\n+    }\r\n+\r\n+    public void setVersion(String version) {\r\n+        this.version = version;\r\n+    }\r\n+\r\n+    public String getGroup() {\r\n+        return group;\r\n+    }\r\n+\r\n+    public void setGroup(String group) {\r\n+        this.group = group;\r\n+    }\r\n+\r\n+    public Set<RestMethodMetadata> getMeta() {\r\n+        if (meta == null) {\r\n+            meta = new LinkedHashSet<>();\r\n+        }\r\n+        return meta;\r\n+    }\r\n+\r\n+    public void setMeta(Set<RestMethodMetadata> meta) {\r\n+        this.meta = meta;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof ServiceRestMetadata)) {\r\n+            return false;\r\n+        }\r\n+        ServiceRestMetadata that = (ServiceRestMetadata) o;\r\n+        return Objects.equals(getServiceInterface(), that.getServiceInterface()) &&\r\n+                Objects.equals(getVersion(), that.getVersion()) &&\r\n+                Objects.equals(getGroup(), that.getGroup()) &&\r\n+                Objects.equals(getMeta(), that.getMeta());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getServiceInterface(), getVersion(), getGroup(), getMeta());\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        final StringBuilder sb = new StringBuilder(\"ServiceRestMetadata{\");\r\n+        sb.append(\"serviceInterface='\").append(serviceInterface).append('\\'');\r\n+        sb.append(\", version='\").append(version).append('\\'');\r\n+        sb.append(\", group='\").append(group).append('\\'');\r\n+        sb.append(\", meta=\").append(meta);\r\n+        sb.append('}');\r\n+        return sb.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/ServiceRestMetadataReader.java", "source2": "org/apache/dubbo/metadata/rest/ServiceRestMetadataReader.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,39 +1,39 @@\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.metadata.rest;\n-\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.List;\n-\n-/**\n- * An interface to read {@link ServiceRestMetadata}\n- *\n- * @see ServiceRestMetadata\n- * @since 2.7.6\n- */\n-@SPI\n-public interface ServiceRestMetadataReader {\n-\n-    /**\n-     * Read the instances of {@link ServiceRestMetadata}\n-     *\n-     * @return non-null\n-     */\n-    List<ServiceRestMetadata> read();\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.metadata.rest;\r\n+\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * An interface to read {@link ServiceRestMetadata}\r\n+ *\r\n+ * @see ServiceRestMetadata\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface ServiceRestMetadataReader {\r\n+\r\n+    /**\r\n+     * Read the instances of {@link ServiceRestMetadata}\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    List<ServiceRestMetadata> read();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/ServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/ServiceRestMetadataResolver.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,43 +1,43 @@\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.metadata.rest;\n-\n-/**\n- * The interface to resolve the {@link ServiceRestMetadata REST metadata} from the specified\n- * Dubbo Service interface or type.\n- *\n- * @since 2.7.6\n- */\n-public interface ServiceRestMetadataResolver {\n-\n-    /**\n-     * Support to resolve {@link ServiceRestMetadata REST metadata} or not\n-     *\n-     * @param serviceType Dubbo Service interface or type\n-     * @return If supports, return <code>true</code>, or <code>false</code>\n-     */\n-    boolean supports(Class<?> serviceType);\n-\n-    /**\n-     * Resolve the {@link ServiceRestMetadata REST metadata} from the specified\n-     * Dubbo Service interface or type\n-     *\n-     * @param serviceType Dubbo Service interface or type\n-     * @return\n-     */\n-    ServiceRestMetadata resolve(Class<?> serviceType);\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.metadata.rest;\r\n+\r\n+/**\r\n+ * The interface to resolve the {@link ServiceRestMetadata REST metadata} from the specified\r\n+ * Dubbo Service interface or type.\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface ServiceRestMetadataResolver {\r\n+\r\n+    /**\r\n+     * Support to resolve {@link ServiceRestMetadata REST metadata} or not\r\n+     *\r\n+     * @param serviceType Dubbo Service interface or type\r\n+     * @return If supports, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean supports(Class<?> serviceType);\r\n+\r\n+    /**\r\n+     * Resolve the {@link ServiceRestMetadata REST metadata} from the specified\r\n+     * Dubbo Service interface or type\r\n+     *\r\n+     * @param serviceType Dubbo Service interface or type\r\n+     * @return\r\n+     */\r\n+    ServiceRestMetadata resolve(Class<?> serviceType);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/DefaultValueParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/DefaultValueParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,74 +1,74 @@\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.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.util.List;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\n-\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @DefaultValue\n- * *\n- *\n- * @since 2.7.6\n- */\n-public class DefaultValueParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String annotationValue, String defaultValue, Annotation annotation, Object parameter,\n-                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-\n-        // process the request parameters\n-        setDefaultValue(requestMetadata.getParams(), defaultValue, annotationValue);\n-        // process the request headers\n-        setDefaultValue(requestMetadata.getHeaders(), defaultValue, annotationValue);\n-    }\n-\n-    private void setDefaultValue(Map<String, List<String>> source, String placeholderValue, String defaultValue) {\n-        OUTTER:\n-        for (Map.Entry<String, List<String>> entry : source.entrySet()) {\n-            List<String> values = entry.getValue();\n-            int size = values.size();\n-            for (int i = 0; i < size; i++) {\n-                String value = values.get(i);\n-                if (placeholderValue.equals(value)) {\n-                    values.set(i, defaultValue);\n-                    break OUTTER;\n-                }\n-            }\n-        }\n-    }\n-\n-    public int getPriority() {\n-        return MIN_PRIORITY;\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.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\r\n+\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @DefaultValue\r\n+ * *\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class DefaultValueParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String annotationValue, String defaultValue, Annotation annotation, Object parameter,\r\n+                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+\r\n+        // process the request parameters\r\n+        setDefaultValue(requestMetadata.getParams(), defaultValue, annotationValue);\r\n+        // process the request headers\r\n+        setDefaultValue(requestMetadata.getHeaders(), defaultValue, annotationValue);\r\n+    }\r\n+\r\n+    private void setDefaultValue(Map<String, List<String>> source, String placeholderValue, String defaultValue) {\r\n+        OUTTER:\r\n+        for (Map.Entry<String, List<String>> entry : source.entrySet()) {\r\n+            List<String> values = entry.getValue();\r\n+            int size = values.size();\r\n+            for (int i = 0; i < size; i++) {\r\n+                String value = values.get(i);\r\n+                if (placeholderValue.equals(value)) {\r\n+                    values.set(i, defaultValue);\r\n+                    break OUTTER;\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/FormParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/FormParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.FORM_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @FormParam\n- *\n- * @since 2.7.6\n- */\n-public class FormParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return FORM_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.FORM_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @FormParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class FormParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return FORM_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/HeaderParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/HeaderParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,49 +1,49 @@\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.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-\n-import static org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HEADER_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @HeaderParam\n- *\n- * @since 2.7.6\n- */\n-public class HeaderParamParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return HEADER_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String headerName, String defaultValue, Annotation annotation, Object parameter,\n-                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-        // Add the placeholder as header value\n-        requestMetadata.addHeader(headerName, buildDefaultValue(parameterIndex));\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.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HEADER_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @HeaderParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class HeaderParamParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return HEADER_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String headerName, String defaultValue, Annotation annotation, Object parameter,\r\n+                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+        // Add the placeholder as header value\r\n+        requestMetadata.addHeader(headerName, buildDefaultValue(parameterIndex));\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/JAXRSServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/JAXRSServiceRestMetadataResolver.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.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AbstractServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-import java.util.Set;\n-import java.util.stream.Stream;\n-\n-import static org.apache.dubbo.common.utils.AnnotationUtils.findAnnotation;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.findMetaAnnotation;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getValue;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.isAnnotationPresent;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.CONSUMES_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HTTP_METHOD_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PATH_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PRODUCES_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * JAX-RS {@link ServiceRestMetadataResolver} implementation\n- *\n- * @since 2.7.6\n- */\n-public class JAXRSServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    @Override\n-    protected boolean supports0(Class<?> serviceType) {\n-        return isAnnotationPresent(serviceType, PATH_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return isAnnotationPresent(serviceMethod, HTTP_METHOD_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        Annotation httpMethod = findMetaAnnotation(serviceMethod, HTTP_METHOD_ANNOTATION_CLASS_NAME);\n-        return getValue(httpMethod);\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        String requestBasePath = resolveRequestPathFromType(serviceType, serviceInterfaceClass);\n-        String requestRelativePath = resolveRequestPathFromMethod(serviceMethod);\n-        return buildPath(requestBasePath, requestRelativePath);\n-    }\n-\n-    private String resolveRequestPathFromType(Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        Annotation path = findAnnotation(serviceType, PATH_ANNOTATION_CLASS_NAME);\n-        if (path == null) {\n-            path = findAnnotation(serviceInterfaceClass, PATH_ANNOTATION_CLASS_NAME);\n-        }\n-        return getValue(path);\n-    }\n-\n-    private String resolveRequestPathFromMethod(Method serviceMethod) {\n-        Annotation path = findAnnotation(serviceMethod, PATH_ANNOTATION_CLASS_NAME);\n-        return getValue(path);\n-    }\n-\n-    @Override\n-    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass,\n-                                   Set<String> produces) {\n-        addAnnotationValues(serviceMethod, PRODUCES_ANNOTATION_CLASS_NAME, produces);\n-    }\n-\n-    @Override\n-    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass,\n-                                   Set<String> consumes) {\n-        addAnnotationValues(serviceMethod, CONSUMES_ANNOTATION_CLASS_NAME, consumes);\n-    }\n-\n-    private void addAnnotationValues(Method serviceMethod, String annotationAttributeName, Set<String> result) {\n-        Annotation annotation = findAnnotation(serviceMethod, annotationAttributeName);\n-        String[] value = getValue(annotation);\n-        if (value != null) {\n-            Stream.of(value).forEach(result::add);\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.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+import java.util.Set;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.findAnnotation;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.findMetaAnnotation;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getValue;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.isAnnotationPresent;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.CONSUMES_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HTTP_METHOD_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PATH_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PRODUCES_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * JAX-RS {@link ServiceRestMetadataResolver} implementation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class JAXRSServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    @Override\r\n+    protected boolean supports0(Class<?> serviceType) {\r\n+        return isAnnotationPresent(serviceType, PATH_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return isAnnotationPresent(serviceMethod, HTTP_METHOD_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        Annotation httpMethod = findMetaAnnotation(serviceMethod, HTTP_METHOD_ANNOTATION_CLASS_NAME);\r\n+        return getValue(httpMethod);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        String requestBasePath = resolveRequestPathFromType(serviceType, serviceInterfaceClass);\r\n+        String requestRelativePath = resolveRequestPathFromMethod(serviceMethod);\r\n+        return buildPath(requestBasePath, requestRelativePath);\r\n+    }\r\n+\r\n+    private String resolveRequestPathFromType(Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        Annotation path = findAnnotation(serviceType, PATH_ANNOTATION_CLASS_NAME);\r\n+        if (path == null) {\r\n+            path = findAnnotation(serviceInterfaceClass, PATH_ANNOTATION_CLASS_NAME);\r\n+        }\r\n+        return getValue(path);\r\n+    }\r\n+\r\n+    private String resolveRequestPathFromMethod(Method serviceMethod) {\r\n+        Annotation path = findAnnotation(serviceMethod, PATH_ANNOTATION_CLASS_NAME);\r\n+        return getValue(path);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass,\r\n+                                   Set<String> produces) {\r\n+        addAnnotationValues(serviceMethod, PRODUCES_ANNOTATION_CLASS_NAME, produces);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass,\r\n+                                   Set<String> consumes) {\r\n+        addAnnotationValues(serviceMethod, CONSUMES_ANNOTATION_CLASS_NAME, consumes);\r\n+    }\r\n+\r\n+    private void addAnnotationValues(Method serviceMethod, String annotationAttributeName, Set<String> result) {\r\n+        Annotation annotation = findAnnotation(serviceMethod, annotationAttributeName);\r\n+        String[] value = getValue(annotation);\r\n+        if (value != null) {\r\n+            Stream.of(value).forEach(result::add);\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/MatrixParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/MatrixParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.MATRIX_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @MatrixParam\n- *\n- * @since 2.7.6\n- */\n-public class MatrixParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return MATRIX_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.MATRIX_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @MatrixParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MatrixParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return MATRIX_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/ParamAnnotationParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/ParamAnnotationParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,38 +1,38 @@\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.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @*Param\n- */\n-public abstract class ParamAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    protected void process(String name, String defaultValue, Annotation annotation, Object parameter,\n-                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-        requestMetadata.addParam(name, defaultValue);\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.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @*Param\r\n+ */\r\n+public abstract class ParamAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, Annotation annotation, Object parameter,\r\n+                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+        requestMetadata.addParam(name, defaultValue);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/jaxrs/QueryParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/jaxrs/QueryParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.QUERY_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @QueryParam\n- *\n- * @since 2.7.6\n- */\n-public class QueryParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return QUERY_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.QUERY_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @QueryParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class QueryParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return QUERY_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,71 +1,71 @@\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.metadata.rest.springmvc;\n-\n-import org.apache.dubbo.common.utils.AnnotationUtils;\n-import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Parameter;\n-import java.util.Objects;\n-\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @Request*\n- */\n-public abstract class AbstractRequestAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    protected String getAnnotationValue(Annotation annotation, Parameter parameter, int parameterIndex) {\n-        // try to get \"value\" attribute first\n-        String name = super.getAnnotationValue(annotation, parameter, parameterIndex);\n-\n-        // try to get \"name\" attribute if required\n-        if (isEmpty(name)) {\n-            name = getAttribute(annotation, \"name\");\n-        }\n-\n-        // finally , try to the name of parameter\n-        if (isEmpty(name)) {\n-            name = parameter.getName();\n-        }\n-\n-        return name;\n-    }\n-\n-    @Override\n-    protected String getDefaultValue(Annotation annotation, Parameter parameter, int parameterIndex) {\n-        String attributeName = \"defaultValue\";\n-        String attributeValue = getAttribute(annotation, attributeName);\n-\n-        if (isEmpty(attributeValue) || isDefaultValue(annotation, attributeName, attributeValue)) {\n-            attributeValue = super.getDefaultValue(annotation, parameter, parameterIndex);\n-        }\n-        return attributeValue;\n-    }\n-\n-    private boolean isDefaultValue(Annotation annotation, String attributeName, Object attributeValue) {\n-        String defaultValue = AnnotationUtils.getDefaultValue(annotation, attributeName);\n-        return Objects.equals(attributeValue, defaultValue);\n-    }\n-\n-    protected boolean isEmpty(String str) {\n-        return str == null || str.isEmpty();\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.metadata.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.common.utils.AnnotationUtils;\r\n+import org.apache.dubbo.metadata.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Parameter;\r\n+import java.util.Objects;\r\n+\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @Request*\r\n+ */\r\n+public abstract class AbstractRequestAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    protected String getAnnotationValue(Annotation annotation, Parameter parameter, int parameterIndex) {\r\n+        // try to get \"value\" attribute first\r\n+        String name = super.getAnnotationValue(annotation, parameter, parameterIndex);\r\n+\r\n+        // try to get \"name\" attribute if required\r\n+        if (isEmpty(name)) {\r\n+            name = getAttribute(annotation, \"name\");\r\n+        }\r\n+\r\n+        // finally , try to the name of parameter\r\n+        if (isEmpty(name)) {\r\n+            name = parameter.getName();\r\n+        }\r\n+\r\n+        return name;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String getDefaultValue(Annotation annotation, Parameter parameter, int parameterIndex) {\r\n+        String attributeName = \"defaultValue\";\r\n+        String attributeValue = getAttribute(annotation, attributeName);\r\n+\r\n+        if (isEmpty(attributeValue) || isDefaultValue(annotation, attributeName, attributeValue)) {\r\n+            attributeValue = super.getDefaultValue(annotation, parameter, parameterIndex);\r\n+        }\r\n+        return attributeValue;\r\n+    }\r\n+\r\n+    private boolean isDefaultValue(Annotation annotation, String attributeName, Object attributeValue) {\r\n+        String defaultValue = AnnotationUtils.getDefaultValue(annotation, attributeName);\r\n+        return Objects.equals(attributeValue, defaultValue);\r\n+    }\r\n+\r\n+    protected boolean isEmpty(String str) {\r\n+        return str == null || str.isEmpty();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/springmvc/RequestHeaderParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/springmvc/RequestHeaderParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,43 +1,43 @@\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.metadata.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_HEADER_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestHeader\n- */\n-public class RequestHeaderParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return REQUEST_HEADER_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String name, String defaultValue, Annotation annotation, Object parameter,\n-                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\n-        restMethodMetadata.getRequest().addHeader(name, defaultValue);\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.metadata.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_HEADER_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestHeader\r\n+ */\r\n+public class RequestHeaderParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return REQUEST_HEADER_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, Annotation annotation, Object parameter,\r\n+                           int parameterIndex, Method method, RestMethodMetadata restMethodMetadata) {\r\n+        restMethodMetadata.getRequest().addHeader(name, defaultValue);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/springmvc/RequestParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/rest/springmvc/RequestParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,43 +1,43 @@\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.metadata.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Method;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestParam\n- */\n-public class RequestParamParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return REQUEST_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String name, String defaultValue, Annotation annotation, Object parameter, int parameterIndex,\n-                           Method method, RestMethodMetadata restMethodMetadata) {\n-        restMethodMetadata.getRequest().addParam(name, defaultValue);\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.metadata.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Method;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestParam\r\n+ */\r\n+public class RequestParamParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return REQUEST_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, Annotation annotation, Object parameter, int parameterIndex,\r\n+                           Method method, RestMethodMetadata restMethodMetadata) {\r\n+        restMethodMetadata.getRequest().addParam(name, defaultValue);\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/rest/springmvc/SpringMvcServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/rest/springmvc/SpringMvcServiceRestMetadataResolver.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.metadata.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.rest.AbstractServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.AnnotatedElement;\n-import java.lang.reflect.Array;\n-import java.lang.reflect.Method;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.lang.reflect.Array.getLength;\n-import static java.util.stream.Stream.of;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.findAnnotation;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.isAnnotationPresent;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\n-import static org.apache.dubbo.common.utils.MethodUtils.findMethod;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.ANNOTATED_ELEMENT_UTILS_CLASS;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.CONTROLLER_ANNOTATION_CLASS;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_MAPPING_ANNOTATION_CLASS;\n-\n-/**\n- * {@link ServiceRestMetadataResolver}\n- *\n- * @since 2.7.6\n- */\n-public class SpringMvcServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    private static final int FIRST_ELEMENT_INDEX = 0;\n-\n-    @Override\n-    protected boolean supports0(Class<?> serviceType) {\n-        return isAnnotationPresent(serviceType, CONTROLLER_ANNOTATION_CLASS);\n-    }\n-\n-    @Override\n-    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        return isAnnotationPresent(serviceType, REQUEST_MAPPING_ANNOTATION_CLASS) ||\n-                isAnnotationPresent(serviceMethod, REQUEST_MAPPING_ANNOTATION_CLASS);\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        Annotation requestMapping = getRequestMapping(serviceMethod);\n-\n-        // httpMethod is an array of RequestMethod\n-        Object httpMethod = getAttribute(requestMapping, \"method\");\n-\n-        if (httpMethod == null || getLength(httpMethod) < 1) {\n-            return null;\n-        }\n-\n-        // TODO Is is required to support more request methods?\n-        return valueOf(Array.get(httpMethod, FIRST_ELEMENT_INDEX));\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\n-        String requestBasePath = resolveRequestPath(serviceType);\n-        String requestRelativePath = resolveRequestPath(serviceMethod);\n-        return buildPath(requestBasePath, requestRelativePath);\n-    }\n-\n-    @Override\n-    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> produces) {\n-        addMediaTypes(serviceMethod, \"produces\", produces);\n-    }\n-\n-    @Override\n-    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> consumes) {\n-        addMediaTypes(serviceMethod, \"consumes\", consumes);\n-    }\n-\n-    private String resolveRequestPath(AnnotatedElement annotatedElement) {\n-        Annotation mappingAnnotation = getRequestMapping(annotatedElement);\n-\n-        // try \"value\" first\n-        String[] value = getAttribute(mappingAnnotation, \"value\");\n-\n-        if (isEmpty(value)) { // try \"path\" later\n-            value = getAttribute(mappingAnnotation, \"path\");\n-        }\n-\n-        if (isEmpty(value)) {\n-            return \"\";\n-        }\n-        // TODO Is is required to support more request paths?\n-        return value[FIRST_ELEMENT_INDEX];\n-    }\n-\n-    private void addMediaTypes(Method serviceMethod, String annotationAttributeName, Set<String> mediaTypesSet) {\n-\n-        Annotation mappingAnnotation = getRequestMapping(serviceMethod);\n-\n-        String[] mediaTypes = getAttribute(mappingAnnotation, annotationAttributeName);\n-\n-        if (isNotEmpty(mediaTypes)) {\n-            of(mediaTypes).forEach(mediaTypesSet::add);\n-        }\n-    }\n-\n-    private Annotation getRequestMapping(AnnotatedElement annotatedElement) {\n-        // try \"@RequestMapping\" first\n-        Annotation requestMapping = findAnnotation(annotatedElement, REQUEST_MAPPING_ANNOTATION_CLASS);\n-        if (requestMapping == null) {\n-            // To try the meta-annotated annotation if can't be found.\n-            // For example, if the annotation \"@GetMapping\" is used in the Spring Framework is 4.2 or above,\n-            // because of \"@GetMapping\" alias for (\"@AliasFor\") \"@RequestMapping\" , both of them belongs to\n-            // the artifact \"spring-web\" which depends on \"spring-core\", thus Spring core's\n-            // AnnotatedElementUtils.findMergedAnnotation(AnnotatedElement, Class) must be involved.\n-            Method method = findMethod(ANNOTATED_ELEMENT_UTILS_CLASS, \"findMergedAnnotation\", AnnotatedElement.class, Class.class);\n-            if (method != null) {\n-                try {\n-                    requestMapping = (Annotation) method.invoke(null, annotatedElement, REQUEST_MAPPING_ANNOTATION_CLASS);\n-                } catch (Exception ignored) {\n-                }\n-            }\n-        }\n-        return requestMapping;\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.metadata.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.rest.AbstractServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.AnnotatedElement;\r\n+import java.lang.reflect.Array;\r\n+import java.lang.reflect.Method;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.lang.reflect.Array.getLength;\r\n+import static java.util.stream.Stream.of;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.findAnnotation;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.isAnnotationPresent;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.findMethod;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.ANNOTATED_ELEMENT_UTILS_CLASS;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.CONTROLLER_ANNOTATION_CLASS;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_MAPPING_ANNOTATION_CLASS;\r\n+\r\n+/**\r\n+ * {@link ServiceRestMetadataResolver}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class SpringMvcServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    private static final int FIRST_ELEMENT_INDEX = 0;\r\n+\r\n+    @Override\r\n+    protected boolean supports0(Class<?> serviceType) {\r\n+        return isAnnotationPresent(serviceType, CONTROLLER_ANNOTATION_CLASS);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean isRestCapableMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        return isAnnotationPresent(serviceType, REQUEST_MAPPING_ANNOTATION_CLASS) ||\r\n+                isAnnotationPresent(serviceMethod, REQUEST_MAPPING_ANNOTATION_CLASS);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        Annotation requestMapping = getRequestMapping(serviceMethod);\r\n+\r\n+        // httpMethod is an array of RequestMethod\r\n+        Object httpMethod = getAttribute(requestMapping, \"method\");\r\n+\r\n+        if (httpMethod == null || getLength(httpMethod) < 1) {\r\n+            return null;\r\n+        }\r\n+\r\n+        // TODO Is is required to support more request methods?\r\n+        return valueOf(Array.get(httpMethod, FIRST_ELEMENT_INDEX));\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass) {\r\n+        String requestBasePath = resolveRequestPath(serviceType);\r\n+        String requestRelativePath = resolveRequestPath(serviceMethod);\r\n+        return buildPath(requestBasePath, requestRelativePath);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> produces) {\r\n+        addMediaTypes(serviceMethod, \"produces\", produces);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(Method serviceMethod, Class<?> serviceType, Class<?> serviceInterfaceClass, Set<String> consumes) {\r\n+        addMediaTypes(serviceMethod, \"consumes\", consumes);\r\n+    }\r\n+\r\n+    private String resolveRequestPath(AnnotatedElement annotatedElement) {\r\n+        Annotation mappingAnnotation = getRequestMapping(annotatedElement);\r\n+\r\n+        // try \"value\" first\r\n+        String[] value = getAttribute(mappingAnnotation, \"value\");\r\n+\r\n+        if (isEmpty(value)) { // try \"path\" later\r\n+            value = getAttribute(mappingAnnotation, \"path\");\r\n+        }\r\n+\r\n+        if (isEmpty(value)) {\r\n+            return \"\";\r\n+        }\r\n+        // TODO Is is required to support more request paths?\r\n+        return value[FIRST_ELEMENT_INDEX];\r\n+    }\r\n+\r\n+    private void addMediaTypes(Method serviceMethod, String annotationAttributeName, Set<String> mediaTypesSet) {\r\n+\r\n+        Annotation mappingAnnotation = getRequestMapping(serviceMethod);\r\n+\r\n+        String[] mediaTypes = getAttribute(mappingAnnotation, annotationAttributeName);\r\n+\r\n+        if (isNotEmpty(mediaTypes)) {\r\n+            of(mediaTypes).forEach(mediaTypesSet::add);\r\n+        }\r\n+    }\r\n+\r\n+    private Annotation getRequestMapping(AnnotatedElement annotatedElement) {\r\n+        // try \"@RequestMapping\" first\r\n+        Annotation requestMapping = findAnnotation(annotatedElement, REQUEST_MAPPING_ANNOTATION_CLASS);\r\n+        if (requestMapping == null) {\r\n+            // To try the meta-annotated annotation if can't be found.\r\n+            // For example, if the annotation \"@GetMapping\" is used in the Spring Framework is 4.2 or above,\r\n+            // because of \"@GetMapping\" alias for (\"@AliasFor\") \"@RequestMapping\" , both of them belongs to\r\n+            // the artifact \"spring-web\" which depends on \"spring-core\", thus Spring core's\r\n+            // AnnotatedElementUtils.findMergedAnnotation(AnnotatedElement, Class) must be involved.\r\n+            Method method = findMethod(ANNOTATED_ELEMENT_UTILS_CLASS, \"findMergedAnnotation\", AnnotatedElement.class, Class.class);\r\n+            if (method != null) {\r\n+                try {\r\n+                    requestMapping = (Annotation) method.invoke(null, annotatedElement, REQUEST_MAPPING_ANNOTATION_CLASS);\r\n+                } catch (Exception ignored) {\r\n+                }\r\n+            }\r\n+        }\r\n+        return requestMapping;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/store/AbstractAbstractWritableMetadataService.java", "source2": "org/apache/dubbo/metadata/store/AbstractAbstractWritableMetadataService.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,100 +1,100 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.store;\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.StringUtils;\n-import org.apache.dubbo.metadata.WritableMetadataService;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-\n-import com.google.gson.Gson;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PID_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.TIMESTAMP_KEY;\n-import static org.apache.dubbo.common.utils.ClassUtils.forName;\n-import static org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder.buildFullDefinition;\n-import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;\n-import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;\n-import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;\n-import static org.apache.dubbo.rpc.support.ProtocolUtils.isGeneric;\n-\n-/**\n- * The abstract implementation of {@link WritableMetadataService}\n- *\n- * @see WritableMetadataService\n- * @since 2.7.8\n- */\n-public abstract class AbstractAbstractWritableMetadataService implements WritableMetadataService {\n-\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    @Override\n-    public void publishServiceDefinition(URL url) {\n-        if (SERVICE_INTERFACE_NAME.equals(url.getServiceInterface())) { // Ignore the interface \"MetadataService\"\n-            return;\n-        }\n-\n-        // Remove the useless parameters\n-        url = url.removeParameters(PID_KEY, TIMESTAMP_KEY, BIND_IP_KEY, BIND_PORT_KEY, TIMESTAMP_KEY);\n-\n-        String side = url.getParameter(SIDE_KEY);\n-        if (PROVIDER_SIDE.equalsIgnoreCase(side)) {\n-            publishProviderServiceDefinition(url);\n-        } else {\n-            publishConsumerParameters(url);\n-        }\n-    }\n-\n-    protected void publishProviderServiceDefinition(URL url) {\n-        String serviceDefinition = getServiceDefinition(url);\n-        if (!StringUtils.isBlank(serviceDefinition)) {\n-            publishServiceDefinition(url.getServiceKey(), serviceDefinition);\n-        }\n-    }\n-\n-    protected String getServiceDefinition(URL exportedURL) {\n-        String interfaceName = exportedURL.getParameter(INTERFACE_KEY);\n-        String json = null;\n-        try {\n-            if (StringUtils.isNotEmpty(interfaceName) && !isGeneric(exportedURL.getParameter(GENERIC_KEY))) {\n-                Class interfaceClass = forName(interfaceName);\n-                ServiceDefinition serviceDefinition = buildFullDefinition(interfaceClass, exportedURL.getParameters());\n-                Gson gson = new Gson();\n-                json = gson.toJson(serviceDefinition);\n-            }\n-        } catch (ClassNotFoundException e) {\n-            //ignore error\n-            if (logger.isErrorEnabled()) {\n-                logger.error(\"The interface class[name : \" + interfaceName + \"] can't be found , providerUrl: \"\n-                        + exportedURL.toFullString());\n-            }\n-        }\n-        return json;\n-    }\n-\n-    protected void publishConsumerParameters(URL url) {\n-    }\n-\n-    protected void publishServiceDefinition(String key, String json) {\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.metadata.store;\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.StringUtils;\r\n+import org.apache.dubbo.metadata.WritableMetadataService;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PID_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.TIMESTAMP_KEY;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.forName;\r\n+import static org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder.buildFullDefinition;\r\n+import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;\r\n+import static org.apache.dubbo.rpc.support.ProtocolUtils.isGeneric;\r\n+\r\n+/**\r\n+ * The abstract implementation of {@link WritableMetadataService}\r\n+ *\r\n+ * @see WritableMetadataService\r\n+ * @since 2.7.8\r\n+ */\r\n+public abstract class AbstractAbstractWritableMetadataService implements WritableMetadataService {\r\n+\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    @Override\r\n+    public void publishServiceDefinition(URL url) {\r\n+        if (SERVICE_INTERFACE_NAME.equals(url.getServiceInterface())) { // Ignore the interface \"MetadataService\"\r\n+            return;\r\n+        }\r\n+\r\n+        // Remove the useless parameters\r\n+        url = url.removeParameters(PID_KEY, TIMESTAMP_KEY, BIND_IP_KEY, BIND_PORT_KEY, TIMESTAMP_KEY);\r\n+\r\n+        String side = url.getParameter(SIDE_KEY);\r\n+        if (PROVIDER_SIDE.equalsIgnoreCase(side)) {\r\n+            publishProviderServiceDefinition(url);\r\n+        } else {\r\n+            publishConsumerParameters(url);\r\n+        }\r\n+    }\r\n+\r\n+    protected void publishProviderServiceDefinition(URL url) {\r\n+        String serviceDefinition = getServiceDefinition(url);\r\n+        if (!StringUtils.isBlank(serviceDefinition)) {\r\n+            publishServiceDefinition(url.getServiceKey(), serviceDefinition);\r\n+        }\r\n+    }\r\n+\r\n+    protected String getServiceDefinition(URL exportedURL) {\r\n+        String interfaceName = exportedURL.getParameter(INTERFACE_KEY);\r\n+        String json = null;\r\n+        try {\r\n+            if (StringUtils.isNotEmpty(interfaceName) && !isGeneric(exportedURL.getParameter(GENERIC_KEY))) {\r\n+                Class interfaceClass = forName(interfaceName);\r\n+                ServiceDefinition serviceDefinition = buildFullDefinition(interfaceClass, exportedURL.getParameters());\r\n+                Gson gson = new Gson();\r\n+                json = gson.toJson(serviceDefinition);\r\n+            }\r\n+        } catch (ClassNotFoundException e) {\r\n+            //ignore error\r\n+            if (logger.isErrorEnabled()) {\r\n+                logger.error(\"The interface class[name : \" + interfaceName + \"] can't be found , providerUrl: \"\r\n+                        + exportedURL.toFullString());\r\n+            }\r\n+        }\r\n+        return json;\r\n+    }\r\n+\r\n+    protected void publishConsumerParameters(URL url) {\r\n+    }\r\n+\r\n+    protected void publishServiceDefinition(String key, String json) {\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,4 +1,4 @@\n-array=org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder\n-collection=org.apache.dubbo.metadata.definition.builder.CollectionTypeBuilder\n-map=org.apache.dubbo.metadata.definition.builder.MapTypeBuilder\n+array=org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder\r\n+collection=org.apache.dubbo.metadata.definition.builder.CollectionTypeBuilder\r\n+map=org.apache.dubbo.metadata.definition.builder.MapTypeBuilder\r\n enum=org.apache.dubbo.metadata.definition.builder.EnumTypeBuilder\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.AnnotatedMethodParameterProcessor", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,10 +1,10 @@\n-# JAX-RS's implementations\n-jax-rs.query-param = org.apache.dubbo.metadata.rest.jaxrs.QueryParamParameterProcessor\n-jax-rs.form-param = org.apache.dubbo.metadata.rest.jaxrs.FormParamParameterProcessor\n-jax-rs.matrix-param = org.apache.dubbo.metadata.rest.jaxrs.MatrixParamParameterProcessor\n-jax-rs.header-param = org.apache.dubbo.metadata.rest.jaxrs.HeaderParamParameterProcessor\n-jax-rs.default-value-param = org.apache.dubbo.metadata.rest.jaxrs.DefaultValueParameterProcessor\n-\n-# Spring Web MVC's implementations\n-spring-webmvc.request-param = org.apache.dubbo.metadata.rest.springmvc.RequestParamParameterProcessor\n+# JAX-RS's implementations\r\n+jax-rs.query-param = org.apache.dubbo.metadata.rest.jaxrs.QueryParamParameterProcessor\r\n+jax-rs.form-param = org.apache.dubbo.metadata.rest.jaxrs.FormParamParameterProcessor\r\n+jax-rs.matrix-param = org.apache.dubbo.metadata.rest.jaxrs.MatrixParamParameterProcessor\r\n+jax-rs.header-param = org.apache.dubbo.metadata.rest.jaxrs.HeaderParamParameterProcessor\r\n+jax-rs.default-value-param = org.apache.dubbo.metadata.rest.jaxrs.DefaultValueParameterProcessor\r\n+\r\n+# Spring Web MVC's implementations\r\n+spring-webmvc.request-param = org.apache.dubbo.metadata.rest.springmvc.RequestParamParameterProcessor\r\n spring-webmvc.request-header = org.apache.dubbo.metadata.rest.springmvc.RequestHeaderParameterProcessor\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.rest.ServiceRestMetadataResolver", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,3 +1,3 @@\n-default =\n-jax-rs = org.apache.dubbo.metadata.rest.jaxrs.JAXRSServiceRestMetadataResolver\n+default =\r\n+jax-rs = org.apache.dubbo.metadata.rest.jaxrs.JAXRSServiceRestMetadataResolver\r\n spring-webmvc = org.apache.dubbo.metadata.rest.springmvc.SpringMvcServiceRestMetadataResolver\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-metadata-api/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-metadata-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,192 +1,187 @@\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 2d6d 6574 6164 6174 613c 2f61 7274  bo-metadata</art\n-000004a0: 6966 6163 7449 643e 0d0a 2020 2020 3c76  ifactId>..    <v\n-000004b0: 6572 7369 6f6e 3e32 2e37 2e31 303c 2f76  ersion>2.7.10</v\n-000004c0: 6572 7369 6f6e 3e0d 0a20 203c 2f70 6172  ersion>..  </par\n-000004d0: 656e 743e 0d0a 2020 3c67 726f 7570 4964  ent>..  <groupId\n-000004e0: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n-000004f0: 6f3c 2f67 726f 7570 4964 3e0d 0a20 203c  o</groupId>..  <\n-00000500: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n-00000510: 2d6d 6574 6164 6174 612d 6170 693c 2f61  -metadata-api</a\n-00000520: 7274 6966 6163 7449 643e 0d0a 2020 3c76  rtifactId>..  <v\n-00000530: 6572 7369 6f6e 3e32 2e37 2e31 303c 2f76  ersion>2.7.10</v\n-00000540: 6572 7369 6f6e 3e0d 0a20 203c 6e61 6d65  ersion>..  <name\n-00000550: 3e64 7562 626f 2d6d 6574 6164 6174 612d  >dubbo-metadata-\n-00000560: 6170 693c 2f6e 616d 653e 0d0a 2020 3c64  api</name>..  <d\n-00000570: 6573 6372 6970 7469 6f6e 3e54 6865 206d  escription>The m\n-00000580: 6574 6164 6174 6120 6d6f 6475 6c65 206f  etadata module o\n-00000590: 6620 4475 6262 6f20 7072 6f6a 6563 743c  f Dubbo project<\n-000005a0: 2f64 6573 6372 6970 7469 6f6e 3e0d 0a20  /description>.. \n-000005b0: 203c 6c69 6365 6e73 6573 3e0d 0a20 2020   <licenses>..   \n-000005c0: 203c 6c69 6365 6e73 653e 0d0a 2020 2020   <license>..    \n-000005d0: 2020 3c6e 616d 653e 4170 6163 6865 204c    <name>Apache L\n-000005e0: 6963 656e 7365 2c20 5665 7273 696f 6e20  icense, Version \n-000005f0: 322e 303c 2f6e 616d 653e 0d0a 2020 2020  2.0</name>..    \n-00000600: 2020 3c75 726c 3e68 7474 703a 2f2f 7777    <url>http://ww\n-00000610: 772e 6170 6163 6865 2e6f 7267 2f6c 6963  w.apache.org/lic\n-00000620: 656e 7365 732f 4c49 4345 4e53 452d 322e  enses/LICENSE-2.\n-00000630: 303c 2f75 726c 3e0d 0a20 2020 2020 203c  0</url>..      <\n-00000640: 6469 7374 7269 6275 7469 6f6e 3e72 6570  distribution>rep\n-00000650: 6f3c 2f64 6973 7472 6962 7574 696f 6e3e  o</distribution>\n-00000660: 0d0a 2020 2020 3c2f 6c69 6365 6e73 653e  ..    </license>\n-00000670: 0d0a 2020 3c2f 6c69 6365 6e73 6573 3e0d  ..  </licenses>.\n-00000680: 0a20 203c 6465 7065 6e64 656e 6369 6573  .  <dependencies\n-00000690: 3e0d 0a20 2020 203c 6465 7065 6e64 656e  >..    <dependen\n-000006a0: 6379 3e0d 0a20 2020 2020 203c 6772 6f75  cy>..      <grou\n-000006b0: 7049 643e 6f72 672e 6170 6163 6865 2e64  pId>org.apache.d\n-000006c0: 7562 626f 3c2f 6772 6f75 7049 643e 0d0a  ubbo</groupId>..\n-000006d0: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n-000006e0: 643e 6475 6262 6f2d 7270 632d 6170 693c  d>dubbo-rpc-api<\n-000006f0: 2f61 7274 6966 6163 7449 643e 0d0a 2020  /artifactId>..  \n-00000700: 2020 2020 3c76 6572 7369 6f6e 3e24 7b70      <version>${p\n-00000710: 726f 6a65 6374 2e70 6172 656e 742e 7665  roject.parent.ve\n-00000720: 7273 696f 6e7d 3c2f 7665 7273 696f 6e3e  rsion}</version>\n-00000730: 0d0a 2020 2020 2020 3c6f 7074 696f 6e61  ..      <optiona\n-00000740: 6c3e 7472 7565 3c2f 6f70 7469 6f6e 616c  l>true</optional\n-00000750: 3e0d 0a20 2020 203c 2f64 6570 656e 6465  >..    </depende\n-00000760: 6e63 793e 0d0a 2020 2020 3c64 6570 656e  ncy>..    <depen\n-00000770: 6465 6e63 793e 0d0a 2020 2020 2020 3c67  dency>..      <g\n-00000780: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n-00000790: 652e 6475 6262 6f3c 2f67 726f 7570 4964  e.dubbo</groupId\n-000007a0: 3e0d 0a20 2020 2020 203c 6172 7469 6661  >..      <artifa\n-000007b0: 6374 4964 3e64 7562 626f 2d63 6c75 7374  ctId>dubbo-clust\n-000007c0: 6572 3c2f 6172 7469 6661 6374 4964 3e0d  er</artifactId>.\n-000007d0: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n-000007e0: 247b 7072 6f6a 6563 742e 7061 7265 6e74  ${project.parent\n-000007f0: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n-00000800: 6f6e 3e0d 0a20 2020 203c 2f64 6570 656e  on>..    </depen\n-00000810: 6465 6e63 793e 0d0a 2020 2020 3c64 6570  dency>..    <dep\n-00000820: 656e 6465 6e63 793e 0d0a 2020 2020 2020  endency>..      \n-00000830: 3c67 726f 7570 4964 3e63 6f6d 2e67 6f6f  <groupId>com.goo\n-00000840: 676c 652e 636f 6465 2e67 736f 6e3c 2f67  gle.code.gson</g\n-00000850: 726f 7570 4964 3e0d 0a20 2020 2020 203c  roupId>..      <\n-00000860: 6172 7469 6661 6374 4964 3e67 736f 6e3c  artifactId>gson<\n-00000870: 2f61 7274 6966 6163 7449 643e 0d0a 2020  /artifactId>..  \n-00000880: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000890: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n-000008a0: 3e0d 0a20 2020 2020 203c 6772 6f75 7049  >..      <groupI\n-000008b0: 643e 6f72 672e 6170 6163 6865 2e64 7562  d>org.apache.dub\n-000008c0: 626f 3c2f 6772 6f75 7049 643e 0d0a 2020  bo</groupId>..  \n-000008d0: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n-000008e0: 6475 6262 6f2d 636f 6e66 6967 6365 6e74  dubbo-configcent\n-000008f0: 6572 2d7a 6f6f 6b65 6570 6572 3c2f 6172  er-zookeeper</ar\n-00000900: 7469 6661 6374 4964 3e0d 0a20 2020 2020  tifactId>..     \n-00000910: 203c 7665 7273 696f 6e3e 247b 7072 6f6a   <version>${proj\n-00000920: 6563 742e 7061 7265 6e74 2e76 6572 7369  ect.parent.versi\n-00000930: 6f6e 7d3c 2f76 6572 7369 6f6e 3e0d 0a20  on}</version>.. \n-00000940: 2020 2020 203c 7363 6f70 653e 7465 7374       <scope>test\n-00000950: 3c2f 7363 6f70 653e 0d0a 2020 2020 3c2f  </scope>..    </\n-00000960: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00000970: 203c 6465 7065 6e64 656e 6379 3e0d 0a20   <dependency>.. \n-00000980: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n-00000990: 672e 6170 6163 6865 2e63 7572 6174 6f72  g.apache.curator\n-000009a0: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-000009b0: 2020 3c61 7274 6966 6163 7449 643e 6375    <artifactId>cu\n-000009c0: 7261 746f 722d 7465 7374 3c2f 6172 7469  rator-test</arti\n-000009d0: 6661 6374 4964 3e0d 0a20 2020 2020 203c  factId>..      <\n-000009e0: 7363 6f70 653e 7465 7374 3c2f 7363 6f70  scope>test</scop\n-000009f0: 653e 0d0a 2020 2020 3c2f 6465 7065 6e64  e>..    </depend\n-00000a00: 656e 6379 3e0d 0a20 2020 203c 6465 7065  ency>..    <depe\n-00000a10: 6e64 656e 6379 3e0d 0a20 2020 2020 203c  ndency>..      <\n-00000a20: 6772 6f75 7049 643e 6a61 7661 782e 7773  groupId>javax.ws\n-00000a30: 2e72 733c 2f67 726f 7570 4964 3e0d 0a20  .rs</groupId>.. \n-00000a40: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n-00000a50: 3e6a 6176 6178 2e77 732e 7273 2d61 7069  >javax.ws.rs-api\n-00000a60: 3c2f 6172 7469 6661 6374 4964 3e0d 0a20  </artifactId>.. \n-00000a70: 2020 2020 203c 7363 6f70 653e 7465 7374       <scope>test\n-00000a80: 3c2f 7363 6f70 653e 0d0a 2020 2020 3c2f  </scope>..    </\n-00000a90: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00000aa0: 203c 6465 7065 6e64 656e 6379 3e0d 0a20   <dependency>.. \n-00000ab0: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n-00000ac0: 672e 7370 7269 6e67 6672 616d 6577 6f72  g.springframewor\n-00000ad0: 6b3c 2f67 726f 7570 4964 3e0d 0a20 2020  k</groupId>..   \n-00000ae0: 2020 203c 6172 7469 6661 6374 4964 3e73     <artifactId>s\n-00000af0: 7072 696e 672d 7765 623c 2f61 7274 6966  pring-web</artif\n-00000b00: 6163 7449 643e 0d0a 2020 2020 2020 3c73  actId>..      <s\n-00000b10: 636f 7065 3e74 6573 743c 2f73 636f 7065  cope>test</scope\n-00000b20: 3e0d 0a20 2020 203c 2f64 6570 656e 6465  >..    </depende\n-00000b30: 6e63 793e 0d0a 2020 2020 3c64 6570 656e  ncy>..    <depen\n-00000b40: 6465 6e63 793e 0d0a 2020 2020 2020 3c67  dency>..      <g\n-00000b50: 726f 7570 4964 3e6f 7267 2e73 7072 696e  roupId>org.sprin\n-00000b60: 6766 7261 6d65 776f 726b 3c2f 6772 6f75  gframework</grou\n-00000b70: 7049 643e 0d0a 2020 2020 2020 3c61 7274  pId>..      <art\n-00000b80: 6966 6163 7449 643e 7370 7269 6e67 2d63  ifactId>spring-c\n-00000b90: 6f6e 7465 7874 3c2f 6172 7469 6661 6374  ontext</artifact\n-00000ba0: 4964 3e0d 0a20 2020 2020 203c 7363 6f70  Id>..      <scop\n-00000bb0: 653e 7465 7374 3c2f 7363 6f70 653e 0d0a  e>test</scope>..\n-00000bc0: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n-00000bd0: 3e0d 0a20 203c 2f64 6570 656e 6465 6e63  >..  </dependenc\n-00000be0: 6965 733e 0d0a 3c2f 7072 6f6a 6563 743e  ies>..</project>\n-00000bf0: 0d0a                                     ..\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 2d6d 6574  factId>dubbo-met\n+00000480: 6164 6174 613c 2f61 7274 6966 6163 7449  adata</artifactI\n+00000490: 643e 0a20 2020 203c 7665 7273 696f 6e3e  d>.    <version>\n+000004a0: 322e 372e 3130 3c2f 7665 7273 696f 6e3e  2.7.10</version>\n+000004b0: 0a20 203c 2f70 6172 656e 743e 0a20 203c  .  </parent>.  <\n+000004c0: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n+000004d0: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n+000004e0: 643e 0a20 203c 6172 7469 6661 6374 4964  d>.  <artifactId\n+000004f0: 3e64 7562 626f 2d6d 6574 6164 6174 612d  >dubbo-metadata-\n+00000500: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n+00000510: 0a20 203c 7665 7273 696f 6e3e 322e 372e  .  <version>2.7.\n+00000520: 3130 3c2f 7665 7273 696f 6e3e 0a20 203c  10</version>.  <\n+00000530: 6e61 6d65 3e64 7562 626f 2d6d 6574 6164  name>dubbo-metad\n+00000540: 6174 612d 6170 693c 2f6e 616d 653e 0a20  ata-api</name>. \n+00000550: 203c 6465 7363 7269 7074 696f 6e3e 5468   <description>Th\n+00000560: 6520 6d65 7461 6461 7461 206d 6f64 756c  e metadata modul\n+00000570: 6520 6f66 2044 7562 626f 2070 726f 6a65  e of Dubbo proje\n+00000580: 6374 3c2f 6465 7363 7269 7074 696f 6e3e  ct</description>\n+00000590: 0a20 203c 6c69 6365 6e73 6573 3e0a 2020  .  <licenses>.  \n+000005a0: 2020 3c6c 6963 656e 7365 3e0a 2020 2020    <license>.    \n+000005b0: 2020 3c6e 616d 653e 4170 6163 6865 204c    <name>Apache L\n+000005c0: 6963 656e 7365 2c20 5665 7273 696f 6e20  icense, Version \n+000005d0: 322e 303c 2f6e 616d 653e 0a20 2020 2020  2.0</name>.     \n+000005e0: 203c 7572 6c3e 6874 7470 3a2f 2f77 7777   <url>http://www\n+000005f0: 2e61 7061 6368 652e 6f72 672f 6c69 6365  .apache.org/lice\n+00000600: 6e73 6573 2f4c 4943 454e 5345 2d32 2e30  nses/LICENSE-2.0\n+00000610: 3c2f 7572 6c3e 0a20 2020 2020 203c 6469  </url>.      <di\n+00000620: 7374 7269 6275 7469 6f6e 3e72 6570 6f3c  stribution>repo<\n+00000630: 2f64 6973 7472 6962 7574 696f 6e3e 0a20  /distribution>. \n+00000640: 2020 203c 2f6c 6963 656e 7365 3e0a 2020     </license>.  \n+00000650: 3c2f 6c69 6365 6e73 6573 3e0a 2020 3c64  </licenses>.  <d\n+00000660: 6570 656e 6465 6e63 6965 733e 0a20 2020  ependencies>.   \n+00000670: 203c 6465 7065 6e64 656e 6379 3e0a 2020   <dependency>.  \n+00000680: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+00000690: 2e61 7061 6368 652e 6475 6262 6f3c 2f67  .apache.dubbo</g\n+000006a0: 726f 7570 4964 3e0a 2020 2020 2020 3c61  roupId>.      <a\n+000006b0: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n+000006c0: 7270 632d 6170 693c 2f61 7274 6966 6163  rpc-api</artifac\n+000006d0: 7449 643e 0a20 2020 2020 203c 7665 7273  tId>.      <vers\n+000006e0: 696f 6e3e 247b 7072 6f6a 6563 742e 7061  ion>${project.pa\n+000006f0: 7265 6e74 2e76 6572 7369 6f6e 7d3c 2f76  rent.version}</v\n+00000700: 6572 7369 6f6e 3e0a 2020 2020 2020 3c6f  ersion>.      <o\n+00000710: 7074 696f 6e61 6c3e 7472 7565 3c2f 6f70  ptional>true</op\n+00000720: 7469 6f6e 616c 3e0a 2020 2020 3c2f 6465  tional>.    </de\n+00000730: 7065 6e64 656e 6379 3e0a 2020 2020 3c64  pendency>.    <d\n+00000740: 6570 656e 6465 6e63 793e 0a20 2020 2020  ependency>.     \n+00000750: 203c 6772 6f75 7049 643e 6f72 672e 6170   <groupId>org.ap\n+00000760: 6163 6865 2e64 7562 626f 3c2f 6772 6f75  ache.dubbo</grou\n+00000770: 7049 643e 0a20 2020 2020 203c 6172 7469  pId>.      <arti\n+00000780: 6661 6374 4964 3e64 7562 626f 2d63 6c75  factId>dubbo-clu\n+00000790: 7374 6572 3c2f 6172 7469 6661 6374 4964  ster</artifactId\n+000007a0: 3e0a 2020 2020 2020 3c76 6572 7369 6f6e  >.      <version\n+000007b0: 3e24 7b70 726f 6a65 6374 2e70 6172 656e  >${project.paren\n+000007c0: 742e 7665 7273 696f 6e7d 3c2f 7665 7273  t.version}</vers\n+000007d0: 696f 6e3e 0a20 2020 203c 2f64 6570 656e  ion>.    </depen\n+000007e0: 6465 6e63 793e 0a20 2020 203c 6465 7065  dency>.    <depe\n+000007f0: 6e64 656e 6379 3e0a 2020 2020 2020 3c67  ndency>.      <g\n+00000800: 726f 7570 4964 3e63 6f6d 2e67 6f6f 676c  roupId>com.googl\n+00000810: 652e 636f 6465 2e67 736f 6e3c 2f67 726f  e.code.gson</gro\n+00000820: 7570 4964 3e0a 2020 2020 2020 3c61 7274  upId>.      <art\n+00000830: 6966 6163 7449 643e 6773 6f6e 3c2f 6172  ifactId>gson</ar\n+00000840: 7469 6661 6374 4964 3e0a 2020 2020 3c2f  tifactId>.    </\n+00000850: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+00000860: 3c64 6570 656e 6465 6e63 793e 0a20 2020  <dependency>.   \n+00000870: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000880: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n+00000890: 6f75 7049 643e 0a20 2020 2020 203c 6172  oupId>.      <ar\n+000008a0: 7469 6661 6374 4964 3e64 7562 626f 2d63  tifactId>dubbo-c\n+000008b0: 6f6e 6669 6763 656e 7465 722d 7a6f 6f6b  onfigcenter-zook\n+000008c0: 6565 7065 723c 2f61 7274 6966 6163 7449  eeper</artifactI\n+000008d0: 643e 0a20 2020 2020 203c 7665 7273 696f  d>.      <versio\n+000008e0: 6e3e 247b 7072 6f6a 6563 742e 7061 7265  n>${project.pare\n+000008f0: 6e74 2e76 6572 7369 6f6e 7d3c 2f76 6572  nt.version}</ver\n+00000900: 7369 6f6e 3e0a 2020 2020 2020 3c73 636f  sion>.      <sco\n+00000910: 7065 3e74 6573 743c 2f73 636f 7065 3e0a  pe>test</scope>.\n+00000920: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+00000930: 3e0a 2020 2020 3c64 6570 656e 6465 6e63  >.    <dependenc\n+00000940: 793e 0a20 2020 2020 203c 6772 6f75 7049  y>.      <groupI\n+00000950: 643e 6f72 672e 6170 6163 6865 2e63 7572  d>org.apache.cur\n+00000960: 6174 6f72 3c2f 6772 6f75 7049 643e 0a20  ator</groupId>. \n+00000970: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00000980: 3e63 7572 6174 6f72 2d74 6573 743c 2f61  >curator-test</a\n+00000990: 7274 6966 6163 7449 643e 0a20 2020 2020  rtifactId>.     \n+000009a0: 203c 7363 6f70 653e 7465 7374 3c2f 7363   <scope>test</sc\n+000009b0: 6f70 653e 0a20 2020 203c 2f64 6570 656e  ope>.    </depen\n+000009c0: 6465 6e63 793e 0a20 2020 203c 6465 7065  dency>.    <depe\n+000009d0: 6e64 656e 6379 3e0a 2020 2020 2020 3c67  ndency>.      <g\n+000009e0: 726f 7570 4964 3e6a 6176 6178 2e77 732e  roupId>javax.ws.\n+000009f0: 7273 3c2f 6772 6f75 7049 643e 0a20 2020  rs</groupId>.   \n+00000a00: 2020 203c 6172 7469 6661 6374 4964 3e6a     <artifactId>j\n+00000a10: 6176 6178 2e77 732e 7273 2d61 7069 3c2f  avax.ws.rs-api</\n+00000a20: 6172 7469 6661 6374 4964 3e0a 2020 2020  artifactId>.    \n+00000a30: 2020 3c73 636f 7065 3e74 6573 743c 2f73    <scope>test</s\n+00000a40: 636f 7065 3e0a 2020 2020 3c2f 6465 7065  cope>.    </depe\n+00000a50: 6e64 656e 6379 3e0a 2020 2020 3c64 6570  ndency>.    <dep\n+00000a60: 656e 6465 6e63 793e 0a20 2020 2020 203c  endency>.      <\n+00000a70: 6772 6f75 7049 643e 6f72 672e 7370 7269  groupId>org.spri\n+00000a80: 6e67 6672 616d 6577 6f72 6b3c 2f67 726f  ngframework</gro\n+00000a90: 7570 4964 3e0a 2020 2020 2020 3c61 7274  upId>.      <art\n+00000aa0: 6966 6163 7449 643e 7370 7269 6e67 2d77  ifactId>spring-w\n+00000ab0: 6562 3c2f 6172 7469 6661 6374 4964 3e0a  eb</artifactId>.\n+00000ac0: 2020 2020 2020 3c73 636f 7065 3e74 6573        <scope>tes\n+00000ad0: 743c 2f73 636f 7065 3e0a 2020 2020 3c2f  t</scope>.    </\n+00000ae0: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+00000af0: 3c64 6570 656e 6465 6e63 793e 0a20 2020  <dependency>.   \n+00000b00: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000b10: 7370 7269 6e67 6672 616d 6577 6f72 6b3c  springframework<\n+00000b20: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+00000b30: 3c61 7274 6966 6163 7449 643e 7370 7269  <artifactId>spri\n+00000b40: 6e67 2d63 6f6e 7465 7874 3c2f 6172 7469  ng-context</arti\n+00000b50: 6661 6374 4964 3e0a 2020 2020 2020 3c73  factId>.      <s\n+00000b60: 636f 7065 3e74 6573 743c 2f73 636f 7065  cope>test</scope\n+00000b70: 3e0a 2020 2020 3c2f 6465 7065 6e64 656e  >.    </dependen\n+00000b80: 6379 3e0a 2020 3c2f 6465 7065 6e64 656e  cy>.  </dependen\n+00000b90: 6369 6573 3e0a 3c2f 7072 6f6a 6563 743e  cies>.</project>\n+00000ba0: 0a                                       .\n"}]}
